@@ -8,7 +8,7 @@ pipeline {
88 }
99 // Input to determine if this is a package check
1010 parameters {
11- string(defaultValue : ' false' , description : ' package check run' , name : ' PACKAGE_CHECK' )
11+ string(defaultValue : ' false' , description : ' package check run' , name : ' PACKAGE_CHECK' )
1212 }
1313 // Configuration for the variables used for this specific repo
1414 environment {
@@ -191,6 +191,7 @@ pipeline {
191191 env. VERSION_TAG = env. EXT_RELEASE_CLEAN + ' -ls' + env. LS_TAG_NUMBER
192192 env. META_TAG = ' 3.19-' + env. EXT_RELEASE_CLEAN + ' -ls' + env. LS_TAG_NUMBER
193193 env. EXT_RELEASE_TAG = ' 3.19-version-' + env. EXT_RELEASE_CLEAN
194+ env. BUILDCACHE = ' docker.io/lsiodev/buildcache,registry.gitlab.com/linuxserver.io/docker-jenkins-builder/lsiodev-buildcache,ghcr.io/linuxserver/lsiodev-buildcache,quay.io/linuxserver.io/lsiodev-buildcache'
194195 }
195196 }
196197 }
@@ -215,6 +216,7 @@ pipeline {
215216 env. META_TAG = ' 3.19-' + env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -dev-' + env. COMMIT_SHA
216217 env. EXT_RELEASE_TAG = ' 3.19-version-' + env. EXT_RELEASE_CLEAN
217218 env. DOCKERHUB_LINK = ' https://hub.docker.com/r/' + env. DEV_DOCKERHUB_IMAGE + ' /tags/'
219+ env. BUILDCACHE = ' docker.io/lsiodev/buildcache,registry.gitlab.com/linuxserver.io/docker-jenkins-builder/lsiodev-buildcache,ghcr.io/linuxserver/lsiodev-buildcache,quay.io/linuxserver.io/lsiodev-buildcache'
218220 }
219221 }
220222 }
@@ -239,6 +241,7 @@ pipeline {
239241 env. EXT_RELEASE_TAG = ' 3.19-version-' + env. EXT_RELEASE_CLEAN
240242 env. CODE_URL = ' https://github.com/' + env. LS_USER + ' /' + env. LS_REPO + ' /pull/' + env. PULL_REQUEST
241243 env. DOCKERHUB_LINK = ' https://hub.docker.com/r/' + env. PR_DOCKERHUB_IMAGE + ' /tags/'
244+ env. BUILDCACHE = ' docker.io/lsiodev/buildcache,registry.gitlab.com/linuxserver.io/docker-jenkins-builder/lsiodev-buildcache,ghcr.io/linuxserver/lsiodev-buildcache,quay.io/linuxserver.io/lsiodev-buildcache'
242245 }
243246 }
244247 }
@@ -508,8 +511,42 @@ pipeline {
508511 --label \" org.opencontainers.image.title=Baseimage-alpine-nginx\" \
509512 --label \" org.opencontainers.image.description=baseimage-alpine-nginx image by linuxserver.io\" \
510513 --no-cache --pull -t ${ IMAGE} :${ META_TAG} --platform=linux/amd64 \
511- --provenance=false --sbom=false \
514+ --provenance=true --sbom=true --builder=container --load \
512515 --build-arg ${ BUILD_VERSION_ARG} =${ EXT_RELEASE} --build-arg VERSION=\" ${ VERSION_TAG} \" --build-arg BUILD_DATE=${ GITHUB_DATE} ."
516+ sh ''' #! /bin/bash
517+ set -e
518+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
519+ for i in "${CACHE[@]}"; do
520+ docker tag ${IMAGE}:${META_TAG} ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
521+ done
522+ '''
523+ withCredentials([
524+ [
525+ $class : ' UsernamePasswordMultiBinding' ,
526+ credentialsId : ' Quay.io-Robot' ,
527+ usernameVariable : ' QUAYUSER' ,
528+ passwordVariable : ' QUAYPASS'
529+ ]
530+ ]) {
531+ retry_backoff(5 ,5 ) {
532+ sh ''' #! /bin/bash
533+ set -e
534+ echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
535+ echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
536+ echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
537+ echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
538+ if [[ "${PACKAGE_CHECK}" != "true" ]]; then
539+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
540+ for i in "${CACHE[@]}"; do
541+ docker push ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} &
542+ done
543+ for p in $(jobs -p); do
544+ wait "$p" || { echo "job $p failed" >&2; exit 1; }
545+ done
546+ fi
547+ '''
548+ }
549+ }
513550 }
514551 }
515552 // Build MultiArch Docker containers for push to LS Repo
@@ -539,8 +576,42 @@ pipeline {
539576 --label \" org.opencontainers.image.title=Baseimage-alpine-nginx\" \
540577 --label \" org.opencontainers.image.description=baseimage-alpine-nginx image by linuxserver.io\" \
541578 --no-cache --pull -t ${ IMAGE} :amd64-${ META_TAG} --platform=linux/amd64 \
542- --provenance=false --sbom=false \
579+ --provenance=true --sbom=true --builder=container --load \
543580 --build-arg ${ BUILD_VERSION_ARG} =${ EXT_RELEASE} --build-arg VERSION=\" ${ VERSION_TAG} \" --build-arg BUILD_DATE=${ GITHUB_DATE} ."
581+ sh ''' #! /bin/bash
582+ set -e
583+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
584+ for i in "${CACHE[@]}"; do
585+ docker tag ${IMAGE}:amd64-${META_TAG} ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
586+ done
587+ '''
588+ withCredentials([
589+ [
590+ $class : ' UsernamePasswordMultiBinding' ,
591+ credentialsId : ' Quay.io-Robot' ,
592+ usernameVariable : ' QUAYUSER' ,
593+ passwordVariable : ' QUAYPASS'
594+ ]
595+ ]) {
596+ retry_backoff(5 ,5 ) {
597+ sh ''' #! /bin/bash
598+ set -e
599+ echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
600+ echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
601+ echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
602+ echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
603+ if [[ "${PACKAGE_CHECK}" != "true" ]]; then
604+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
605+ for i in "${CACHE[@]}"; do
606+ docker push ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} &
607+ done
608+ for p in $(jobs -p); do
609+ wait "$p" || { echo "job $p failed" >&2; exit 1; }
610+ done
611+ fi
612+ '''
613+ }
614+ }
544615 }
545616 }
546617 stage(' Build ARM64' ) {
@@ -549,10 +620,6 @@ pipeline {
549620 }
550621 steps {
551622 echo " Running on node: ${ NODE_NAME} "
552- echo ' Logging into Github'
553- sh ''' #! /bin/bash
554- echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
555- '''
556623 sh " docker buildx build \
557624 --label \" org.opencontainers.image.created=${ GITHUB_DATE} \" \
558625 --label \" org.opencontainers.image.authors=linuxserver.io\" \
@@ -567,18 +634,49 @@ pipeline {
567634 --label \" org.opencontainers.image.title=Baseimage-alpine-nginx\" \
568635 --label \" org.opencontainers.image.description=baseimage-alpine-nginx image by linuxserver.io\" \
569636 --no-cache --pull -f Dockerfile.aarch64 -t ${ IMAGE} :arm64v8-${ META_TAG} --platform=linux/arm64 \
570- --provenance=false --sbom=false \
637+ --provenance=true --sbom=true --builder=container --load \
571638 --build-arg ${ BUILD_VERSION_ARG} =${ EXT_RELEASE} --build-arg VERSION=\" ${ VERSION_TAG} \" --build-arg BUILD_DATE=${ GITHUB_DATE} ."
572- sh " docker tag ${ IMAGE} :arm64v8-${ META_TAG} ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${ COMMIT_SHA} -${ BUILD_NUMBER} "
573- retry_backoff(5 ,5 ) {
574- sh " docker push ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${ COMMIT_SHA} -${ BUILD_NUMBER} "
639+ sh ''' #! /bin/bash
640+ set -e
641+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
642+ for i in "${CACHE[@]}"; do
643+ docker tag ${IMAGE}:arm64v8-${META_TAG} ${i}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
644+ done
645+ '''
646+ withCredentials([
647+ [
648+ $class : ' UsernamePasswordMultiBinding' ,
649+ credentialsId : ' Quay.io-Robot' ,
650+ usernameVariable : ' QUAYUSER' ,
651+ passwordVariable : ' QUAYPASS'
652+ ]
653+ ]) {
654+ retry_backoff(5 ,5 ) {
655+ sh ''' #! /bin/bash
656+ set -e
657+ echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
658+ echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
659+ echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
660+ echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
661+ if [[ "${PACKAGE_CHECK}" != "true" ]]; then
662+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
663+ for i in "${CACHE[@]}"; do
664+ docker push ${i}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} &
665+ done
666+ for p in $(jobs -p); do
667+ wait "$p" || { echo "job $p failed" >&2; exit 1; }
668+ done
669+ fi
670+ '''
671+ }
575672 }
576673 sh ''' #! /bin/bash
577674 containers=$(docker ps -aq)
578675 if [[ -n "${containers}" ]]; then
579676 docker stop ${containers}
580677 fi
581- docker system prune -af --volumes || : '''
678+ docker system prune -af --volumes || :
679+ '''
582680 }
583681 }
584682 }
@@ -728,37 +826,23 @@ pipeline {
728826 environment name : ' EXIT_STATUS' , value : ' '
729827 }
730828 steps {
731- withCredentials([
732- [
733- $class : ' UsernamePasswordMultiBinding' ,
734- credentialsId : ' Quay.io-Robot' ,
735- usernameVariable : ' QUAYUSER' ,
736- passwordVariable : ' QUAYPASS'
737- ]
738- ]) {
739- retry_backoff(5 ,5 ) {
740- sh ''' #! /bin/bash
741- set -e
742- echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
743- echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
744- echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
745- echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
746- for PUSHIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${IMAGE}"; do
747- docker tag ${IMAGE}:${META_TAG} ${PUSHIMAGE}:${META_TAG}
748- docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:3.19
749- docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${EXT_RELEASE_TAG}
750- if [ -n "${SEMVER}" ]; then
751- docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${SEMVER}
752- fi
753- docker push ${PUSHIMAGE}:3.19
754- docker push ${PUSHIMAGE}:${META_TAG}
755- docker push ${PUSHIMAGE}:${EXT_RELEASE_TAG}
756- if [ -n "${SEMVER}" ]; then
757- docker push ${PUSHIMAGE}:${SEMVER}
758- fi
829+ retry_backoff(5 ,5 ) {
830+ sh ''' #! /bin/bash
831+ set -e
832+ for PUSHIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
833+ [[ ${PUSHIMAGE%%/*} =~ \\ . ]] && PUSHIMAGEPLUS="${PUSHIMAGE}" || PUSHIMAGEPLUS="docker.io/${PUSHIMAGE}"
834+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
835+ for i in "${CACHE[@]}"; do
836+ if [[ "${PUSHIMAGEPLUS}" == "$(cut -d "/" -f1 <<< ${i})"* ]]; then
837+ CACHEIMAGE=${i}
838+ fi
759839 done
760- '''
761- }
840+ docker buildx imagetools create --prefer-index=false -t ${PUSHIMAGE}:${META_TAG} -t ${PUSHIMAGE}:3.19 -t ${PUSHIMAGE}:${EXT_RELEASE_TAG} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
841+ if [ -n "${SEMVER}" ]; then
842+ docker buildx imagetools create --prefer-index=false -t ${PUSHIMAGE}:${SEMVER} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
843+ fi
844+ done
845+ '''
762846 }
763847 }
764848 }
@@ -769,57 +853,34 @@ pipeline {
769853 environment name : ' EXIT_STATUS' , value : ' '
770854 }
771855 steps {
772- withCredentials([
773- [
774- $class : ' UsernamePasswordMultiBinding' ,
775- credentialsId : ' Quay.io-Robot' ,
776- usernameVariable : ' QUAYUSER' ,
777- passwordVariable : ' QUAYPASS'
778- ]
779- ]) {
780- retry_backoff(5 ,5 ) {
781- sh ''' #! /bin/bash
782- set -e
783- echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
784- echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
785- echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
786- echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
787- if [ "${CI}" == "false" ]; then
788- docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} --platform=arm64
789- docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
790- fi
791- for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
792- docker tag ${IMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG}
793- docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-3.19
794- docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
795- docker tag ${IMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
796- docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-3.19
797- docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
798- if [ -n "${SEMVER}" ]; then
799- docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${SEMVER}
800- docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
801- fi
802- docker push ${MANIFESTIMAGE}:amd64-${META_TAG}
803- docker push ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
804- docker push ${MANIFESTIMAGE}:amd64-3.19
805- docker push ${MANIFESTIMAGE}:arm64v8-${META_TAG}
806- docker push ${MANIFESTIMAGE}:arm64v8-3.19
807- docker push ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
808- if [ -n "${SEMVER}" ]; then
809- docker push ${MANIFESTIMAGE}:amd64-${SEMVER}
810- docker push ${MANIFESTIMAGE}:arm64v8-${SEMVER}
811- fi
812- done
813- for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
814- docker buildx imagetools create -t ${MANIFESTIMAGE}:3.19 ${MANIFESTIMAGE}:amd64-3.19 ${MANIFESTIMAGE}:arm64v8-3.19
815- docker buildx imagetools create -t ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
816- docker buildx imagetools create -t ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
817- if [ -n "${SEMVER}" ]; then
818- docker buildx imagetools create -t ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
819- fi
856+ retry_backoff(5 ,5 ) {
857+ sh ''' #! /bin/bash
858+ set -e
859+ for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
860+ [[ ${MANIFESTIMAGE%%/*} =~ \\ . ]] && MANIFESTIMAGEPLUS="${MANIFESTIMAGE}" || MANIFESTIMAGEPLUS="docker.io/${MANIFESTIMAGE}"
861+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
862+ for i in "${CACHE[@]}"; do
863+ if [[ "${MANIFESTIMAGEPLUS}" == "$(cut -d "/" -f1 <<< ${i})"* ]]; then
864+ CACHEIMAGE=${i}
865+ fi
820866 done
821- '''
822- }
867+ docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:amd64-${META_TAG} -t ${MANIFESTIMAGE}:amd64-3.19 -t ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
868+ docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:arm64v8-${META_TAG} -t ${MANIFESTIMAGE}:arm64v8-3.19 -t ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} ${CACHEIMAGE}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
869+ if [ -n "${SEMVER}" ]; then
870+ docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:amd64-${SEMVER} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
871+ docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:arm64v8-${SEMVER} ${CACHEIMAGE}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
872+ fi
873+ done
874+ for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
875+ docker buildx imagetools create -t ${MANIFESTIMAGE}:3.19 ${MANIFESTIMAGE}:amd64-3.19 ${MANIFESTIMAGE}:arm64v8-3.19
876+ docker buildx imagetools create -t ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
877+
878+ docker buildx imagetools create -t ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
879+ if [ -n "${SEMVER}" ]; then
880+ docker buildx imagetools create -t ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
881+ fi
882+ done
883+ '''
823884 }
824885 }
825886 }
0 commit comments