#!groovy def repository = "registry.c.test-chamber-13.lan" def repositoryCreds = "harbor-repository-creds" def workspace def dockerFile def AlpineGlibcBaseURL = "https://nexus.c.test-chamber-13.lan/repository/github-releases/sgerrand/alpine-pkg-glibc/releases/download" def AlpineGlibcPackageVersion def AlpineGlibcBasePackageFilename def AlpineGlibcBinPackageFilename def AlpineGlibcI18nPackageFilename def staticVersion = "2.34-r0" def GlibcLanguage = "C.UTF-8" def TimeZone = "America/Chicago" def label = "kubernetes-${UUID.randomUUID().toString()}" def templateName = "pipeline-worker" pipeline { agent { kubernetes { yaml functions.podYaml( repo: repository, templateName: templateName, kaniko: true, alpine: true ) } } stages { stage ('Initalize Jenkins') { steps { script { workspace = pwd() container ('alpine') { sh """ if [ ! -f "/usr/bin/curl" ] || [ ! -x "/usr/bin/curl" ]; then apk add --no-cache curl fi if [ ! -f "/usr/bin/jq" ] || [ ! -x "/usr/bin/jq" ]; then apk add --no-cache jq fi """ AlpineGlibcPackageVersion = sh ( script: "curl --silent --location --fail \"https://api.github.com/repos/sgerrand/alpine-pkg-glibc/releases\" | jq -r .[0].tag_name", returnStdout: true ).trim() } } } } stage ('Build & Push (latest)') { steps { container ('kaniko') { script { AlpineGlibcBasePackageFilename = "glibc-${AlpineGlibcPackageVersion}.apk" AlpineGlibcBinPackageFilename = "glibc-bin-${AlpineGlibcPackageVersion}.apk" AlpineGlibcI18nPackageFilename = "glibc-i18n-${AlpineGlibcPackageVersion}.apk" dockerFile = """ FROM registry.c.test-chamber-13.lan/library/alpine:latest LABEL org.opencontainers.image.authors="The_Spider " LABEL org.opencontainers.image.title="alpine-glibc" ARG TZ ARG LANG RUN apk add --update --no-cache --virtual=.build-dependencies \\ curl \\ ca-certificates && \\ printf '%s\\n' \\ "-----BEGIN PUBLIC KEY-----" \\ "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApZ2u1KJKUu/fW4A25y9m" \\ "y70AGEa/J3Wi5ibNVGNn1gT1r0VfgeWd0pUybS4UmcHdiNzxJPgoWQhV2SSW1JYu" \\ "tOqKZF5QSN6X937PTUpNBjUvLtTQ1ve1fp39uf/lEXPpFpOPL88LKnDBgbh7wkCp" \\ "m2KzLVGChf83MS0ShL6G9EQIAUxLm99VpgRjwqTQ/KfzGtpke1wqws4au0Ab4qPY" \\ "KXvMLSPLUp7cfulWvhmZSegr5AdhNw5KNizPqCJT8ZrGvgHypXyiFvvAH5YRtSsc" \\ "Zvo9GI2e2MaZyo9/lvb+LbLEJZKEQckqRj4P26gmASrZEPStwc+yqy1ShHLA0j6m" \\ "1QIDAQAB" \\ "-----END PUBLIC KEY-----" > "/etc/apk/keys/sgerrand.rsa.pub" && \\ curl -sSLO "${AlpineGlibcBaseURL}/${AlpineGlibcPackageVersion}/${AlpineGlibcBasePackageFilename}" && \\ curl -sSLO "${AlpineGlibcBaseURL}/${AlpineGlibcPackageVersion}/${AlpineGlibcBinPackageFilename}" && \\ curl -sSLO "${AlpineGlibcBaseURL}/${AlpineGlibcPackageVersion}/${AlpineGlibcI18nPackageFilename}" && \\ apk add --no-cache --force-overwrite \\ "${AlpineGlibcBasePackageFilename}" \\ "${AlpineGlibcBinPackageFilename}" \\ "${AlpineGlibcI18nPackageFilename}" && \\ rm -v "/etc/apk/keys/sgerrand.rsa.pub" && \\ (/usr/glibc-compat/bin/localedef --force --inputfile POSIX --charmap UTF-8 "\${LANG}" || true) && \\ printf '%s\\n' \\ "export LANG=\${LANG}" >> /etc/profile.d/locale.sh && \\ apk del glibc-i18n && \\ apk del .build-dependencies && \\ rm -v \\ ${AlpineGlibcBasePackageFilename} \\ ${AlpineGlibcBinPackageFilename} \\ ${AlpineGlibcI18nPackageFilename} """ declarativeFunctions.buildContainerMultipleDestinations( dockerFile: dockerFile, repositoryAccess: [ [ repository: repository, credentials: repositoryCreds ], ], destination: [ "${repository}/library/alpine-glibc:latest", ], [ "LANG=${GlibcLanguage}", "TZ=${TimeZone}" ] ) } } } } stage ('Build & Push (Static Version)') { steps { container ('kaniko') { script { AlpineGlibcBasePackageFilename = "glibc-${staticVersion}.apk" AlpineGlibcBinPackageFilename = "glibc-bin-${staticVersion}.apk" AlpineGlibcI18nPackageFilename = "glibc-i18n-${staticVersion}.apk" dockerFile = """ FROM registry.c.test-chamber-13.lan/library/alpine:latest LABEL org.opencontainers.image.authors="The_Spider " LABEL org.opencontainers.image.title="alpine-glibc" ARG TZ ARG LANG RUN apk add --update --no-cache --virtual=.build-dependencies \\ curl \\ ca-certificates && \\ printf '%s\\n' \\ "-----BEGIN PUBLIC KEY-----" \\ "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApZ2u1KJKUu/fW4A25y9m" \\ "y70AGEa/J3Wi5ibNVGNn1gT1r0VfgeWd0pUybS4UmcHdiNzxJPgoWQhV2SSW1JYu" \\ "tOqKZF5QSN6X937PTUpNBjUvLtTQ1ve1fp39uf/lEXPpFpOPL88LKnDBgbh7wkCp" \\ "m2KzLVGChf83MS0ShL6G9EQIAUxLm99VpgRjwqTQ/KfzGtpke1wqws4au0Ab4qPY" \\ "KXvMLSPLUp7cfulWvhmZSegr5AdhNw5KNizPqCJT8ZrGvgHypXyiFvvAH5YRtSsc" \\ "Zvo9GI2e2MaZyo9/lvb+LbLEJZKEQckqRj4P26gmASrZEPStwc+yqy1ShHLA0j6m" \\ "1QIDAQAB" \\ "-----END PUBLIC KEY-----" > "/etc/apk/keys/sgerrand.rsa.pub" && \\ curl -sSLO "${AlpineGlibcBaseURL}/${staticVersion}/${AlpineGlibcBasePackageFilename}" && \\ curl -sSLO "${AlpineGlibcBaseURL}/${staticVersion}/${AlpineGlibcBinPackageFilename}" && \\ curl -sSLO "${AlpineGlibcBaseURL}/${staticVersion}/${AlpineGlibcI18nPackageFilename}" && \\ apk add --no-cache --force-overwrite \\ "${AlpineGlibcBasePackageFilename}" \\ "${AlpineGlibcBinPackageFilename}" \\ "${AlpineGlibcI18nPackageFilename}" && \\ rm -v "/etc/apk/keys/sgerrand.rsa.pub" && \\ (/usr/glibc-compat/bin/localedef --force --inputfile POSIX --charmap UTF-8 "\${LANG}" || true) && \\ printf '%s\\n' \\ "export LANG=\${LANG}" >> /etc/profile.d/locale.sh && \\ apk del glibc-i18n && \\ apk del .build-dependencies && \\ rm -v \\ ${AlpineGlibcBasePackageFilename} \\ ${AlpineGlibcBinPackageFilename} \\ ${AlpineGlibcI18nPackageFilename} """ declarativeFunctions.buildContainerMultipleDestinations( dockerFile: dockerFile, repositoryAccess: [ [ repository: repository, credentials: repositoryCreds ], ], destination: [ "${repository}/library/alpine-glibc:${staticVersion}", ], [ "LANG=${GlibcLanguage}", "TZ=${TimeZone}" ] ) } } } } } }