@@ -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 {
@@ -184,6 +184,7 @@ pipeline {
184184 env. VERSION_TAG = env. EXT_RELEASE_CLEAN + ' -ls' + env. LS_TAG_NUMBER
185185 env. META_TAG = env. EXT_RELEASE_CLEAN + ' -ls' + env. LS_TAG_NUMBER
186186 env. EXT_RELEASE_TAG = ' version-' + env. EXT_RELEASE_CLEAN
187+ 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'
187188 }
188189 }
189190 }
@@ -208,6 +209,7 @@ pipeline {
208209 env. META_TAG = env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -dev-' + env. COMMIT_SHA
209210 env. EXT_RELEASE_TAG = ' version-' + env. EXT_RELEASE_CLEAN
210211 env. DOCKERHUB_LINK = ' https://hub.docker.com/r/' + env. DEV_DOCKERHUB_IMAGE + ' /tags/'
212+ 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'
211213 }
212214 }
213215 }
@@ -232,6 +234,7 @@ pipeline {
232234 env. EXT_RELEASE_TAG = ' version-' + env. EXT_RELEASE_CLEAN
233235 env. CODE_URL = ' https://github.com/' + env. LS_USER + ' /' + env. LS_REPO + ' /pull/' + env. PULL_REQUEST
234236 env. DOCKERHUB_LINK = ' https://hub.docker.com/r/' + env. PR_DOCKERHUB_IMAGE + ' /tags/'
237+ 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'
235238 }
236239 }
237240 }
@@ -502,8 +505,40 @@ pipeline {
502505 --label \" org.opencontainers.image.title=Yq\" \
503506 --label \" org.opencontainers.image.description=yq image by linuxserver.io\" \
504507 --no-cache --pull -t ${ IMAGE} :${ META_TAG} --platform=linux/amd64 \
505- --provenance=false --sbom=false \
508+ --provenance=false --sbom=false --builder=container --load \
506509 --build-arg ${ BUILD_VERSION_ARG} =${ EXT_RELEASE} --build-arg VERSION=\" ${ VERSION_TAG} \" --build-arg BUILD_DATE=${ GITHUB_DATE} ."
510+ sh ''' #! /bin/bash
511+ set -e
512+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
513+ for i in "${CACHE[@]}"; do
514+ docker tag ${IMAGE}:${META_TAG} ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
515+ done
516+ '''
517+ withCredentials([
518+ [
519+ $class : ' UsernamePasswordMultiBinding' ,
520+ credentialsId : ' Quay.io-Robot' ,
521+ usernameVariable : ' QUAYUSER' ,
522+ passwordVariable : ' QUAYPASS'
523+ ]
524+ ]) {
525+ retry_backoff(5 ,5 ) {
526+ sh ''' #! /bin/bash
527+ set -e
528+ echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
529+ echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
530+ echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
531+ echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
532+ if [[ "${PACKAGE_CHECK}" != "true" ]]; then
533+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
534+ for i in "${CACHE[@]}"; do
535+ docker push ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} &
536+ done
537+ wait
538+ fi
539+ '''
540+ }
541+ }
507542 }
508543 }
509544 // Build MultiArch Docker containers for push to LS Repo
@@ -534,8 +569,40 @@ pipeline {
534569 --label \" org.opencontainers.image.title=Yq\" \
535570 --label \" org.opencontainers.image.description=yq image by linuxserver.io\" \
536571 --no-cache --pull -t ${ IMAGE} :amd64-${ META_TAG} --platform=linux/amd64 \
537- --provenance=false --sbom=false \
572+ --provenance=false --sbom=false --builder=container --load \
538573 --build-arg ${ BUILD_VERSION_ARG} =${ EXT_RELEASE} --build-arg VERSION=\" ${ VERSION_TAG} \" --build-arg BUILD_DATE=${ GITHUB_DATE} ."
574+ sh ''' #! /bin/bash
575+ set -e
576+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
577+ for i in "${CACHE[@]}"; do
578+ docker tag ${IMAGE}:amd64-${META_TAG} ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
579+ done
580+ '''
581+ withCredentials([
582+ [
583+ $class : ' UsernamePasswordMultiBinding' ,
584+ credentialsId : ' Quay.io-Robot' ,
585+ usernameVariable : ' QUAYUSER' ,
586+ passwordVariable : ' QUAYPASS'
587+ ]
588+ ]) {
589+ retry_backoff(5 ,5 ) {
590+ sh ''' #! /bin/bash
591+ set -e
592+ echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
593+ echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
594+ echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
595+ echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
596+ if [[ "${PACKAGE_CHECK}" != "true" ]]; then
597+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
598+ for i in "${CACHE[@]}"; do
599+ docker push ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} &
600+ done
601+ wait
602+ fi
603+ '''
604+ }
605+ }
539606 }
540607 }
541608 stage(' Build ARM64' ) {
@@ -544,10 +611,6 @@ pipeline {
544611 }
545612 steps {
546613 echo " Running on node: ${ NODE_NAME} "
547- echo ' Logging into Github'
548- sh ''' #! /bin/bash
549- echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
550- '''
551614 sh " sed -r -i 's|(^FROM .*)|\\ 1\\ n\\ nENV LSIO_FIRST_PARTY=true|g' Dockerfile.aarch64"
552615 sh " docker buildx build \
553616 --label \" org.opencontainers.image.created=${ GITHUB_DATE} \" \
@@ -563,18 +626,47 @@ pipeline {
563626 --label \" org.opencontainers.image.title=Yq\" \
564627 --label \" org.opencontainers.image.description=yq image by linuxserver.io\" \
565628 --no-cache --pull -f Dockerfile.aarch64 -t ${ IMAGE} :arm64v8-${ META_TAG} --platform=linux/arm64 \
566- --provenance=false --sbom=false \
629+ --provenance=false --sbom=false --builder=container --load \
567630 --build-arg ${ BUILD_VERSION_ARG} =${ EXT_RELEASE} --build-arg VERSION=\" ${ VERSION_TAG} \" --build-arg BUILD_DATE=${ GITHUB_DATE} ."
568- sh " docker tag ${ IMAGE} :arm64v8-${ META_TAG} ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${ COMMIT_SHA} -${ BUILD_NUMBER} "
569- retry_backoff(5 ,5 ) {
570- sh " docker push ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${ COMMIT_SHA} -${ BUILD_NUMBER} "
631+ sh ''' #! /bin/bash
632+ set -e
633+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
634+ for i in "${CACHE[@]}"; do
635+ docker tag ${IMAGE}:arm64v8-${META_TAG} ${i}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
636+ done
637+ '''
638+ withCredentials([
639+ [
640+ $class : ' UsernamePasswordMultiBinding' ,
641+ credentialsId : ' Quay.io-Robot' ,
642+ usernameVariable : ' QUAYUSER' ,
643+ passwordVariable : ' QUAYPASS'
644+ ]
645+ ]) {
646+ retry_backoff(5 ,5 ) {
647+ sh ''' #! /bin/bash
648+ set -e
649+ echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
650+ echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
651+ echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
652+ echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
653+ if [[ "${PACKAGE_CHECK}" != "true" ]]; then
654+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
655+ for i in "${CACHE[@]}"; do
656+ docker push ${i}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} &
657+ done
658+ wait
659+ fi
660+ '''
661+ }
571662 }
572663 sh ''' #! /bin/bash
573664 containers=$(docker ps -aq)
574665 if [[ -n "${containers}" ]]; then
575666 docker stop ${containers}
576667 fi
577- docker system prune -af --volumes || : '''
668+ docker system prune -af --volumes || :
669+ '''
578670 }
579671 }
580672 }
@@ -723,37 +815,23 @@ pipeline {
723815 environment name : ' EXIT_STATUS' , value : ' '
724816 }
725817 steps {
726- withCredentials([
727- [
728- $class : ' UsernamePasswordMultiBinding' ,
729- credentialsId : ' Quay.io-Robot' ,
730- usernameVariable : ' QUAYUSER' ,
731- passwordVariable : ' QUAYPASS'
732- ]
733- ]) {
734- retry_backoff(5 ,5 ) {
735- sh ''' #! /bin/bash
736- set -e
737- echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
738- echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
739- echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
740- echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
741- for PUSHIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${IMAGE}"; do
742- docker tag ${IMAGE}:${META_TAG} ${PUSHIMAGE}:${META_TAG}
743- docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:latest
744- docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${EXT_RELEASE_TAG}
745- if [ -n "${SEMVER}" ]; then
746- docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${SEMVER}
747- fi
748- docker push ${PUSHIMAGE}:latest
749- docker push ${PUSHIMAGE}:${META_TAG}
750- docker push ${PUSHIMAGE}:${EXT_RELEASE_TAG}
751- if [ -n "${SEMVER}" ]; then
752- docker push ${PUSHIMAGE}:${SEMVER}
753- fi
818+ retry_backoff(5 ,5 ) {
819+ sh ''' #! /bin/bash
820+ set -e
821+ for PUSHIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
822+ [[ ${PUSHIMAGE%%/*} =~ \\ . ]] && PUSHIMAGEPLUS="${PUSHIMAGE}" || PUSHIMAGEPLUS="docker.io/${PUSHIMAGE}"
823+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
824+ for i in "${CACHE[@]}"; do
825+ if [[ "${PUSHIMAGEPLUS}" == "$(cut -d "/" -f1 <<< ${i})"* ]]; then
826+ CACHEIMAGE=${i}
827+ fi
754828 done
755- '''
756- }
829+ docker buildx imagetools create --prefer-index=false -t ${PUSHIMAGE}:${META_TAG} -t ${PUSHIMAGE}:latest -t ${PUSHIMAGE}:${EXT_RELEASE_TAG} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
830+ if [ -n "${SEMVER}" ]; then
831+ docker buildx imagetools create --prefer-index=false -t ${PUSHIMAGE}:${SEMVER} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
832+ fi
833+ done
834+ '''
757835 }
758836 }
759837 }
@@ -764,57 +842,34 @@ pipeline {
764842 environment name : ' EXIT_STATUS' , value : ' '
765843 }
766844 steps {
767- withCredentials([
768- [
769- $class : ' UsernamePasswordMultiBinding' ,
770- credentialsId : ' Quay.io-Robot' ,
771- usernameVariable : ' QUAYUSER' ,
772- passwordVariable : ' QUAYPASS'
773- ]
774- ]) {
775- retry_backoff(5 ,5 ) {
776- sh ''' #! /bin/bash
777- set -e
778- echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
779- echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
780- echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
781- echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
782- if [ "${CI}" == "false" ]; then
783- docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} --platform=arm64
784- docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
785- fi
786- for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
787- docker tag ${IMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG}
788- docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-latest
789- docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
790- docker tag ${IMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
791- docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-latest
792- docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
793- if [ -n "${SEMVER}" ]; then
794- docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${SEMVER}
795- docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
796- fi
797- docker push ${MANIFESTIMAGE}:amd64-${META_TAG}
798- docker push ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
799- docker push ${MANIFESTIMAGE}:amd64-latest
800- docker push ${MANIFESTIMAGE}:arm64v8-${META_TAG}
801- docker push ${MANIFESTIMAGE}:arm64v8-latest
802- docker push ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
803- if [ -n "${SEMVER}" ]; then
804- docker push ${MANIFESTIMAGE}:amd64-${SEMVER}
805- docker push ${MANIFESTIMAGE}:arm64v8-${SEMVER}
806- fi
807- done
808- for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
809- docker buildx imagetools create -t ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:amd64-latest ${MANIFESTIMAGE}:arm64v8-latest
810- docker buildx imagetools create -t ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
811- docker buildx imagetools create -t ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
812- if [ -n "${SEMVER}" ]; then
813- docker buildx imagetools create -t ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
814- fi
845+ retry_backoff(5 ,5 ) {
846+ sh ''' #! /bin/bash
847+ set -e
848+ for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
849+ [[ ${MANIFESTIMAGE%%/*} =~ \\ . ]] && MANIFESTIMAGEPLUS="${MANIFESTIMAGE}" || MANIFESTIMAGEPLUS="docker.io/${MANIFESTIMAGE}"
850+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
851+ for i in "${CACHE[@]}"; do
852+ if [[ "${MANIFESTIMAGEPLUS}" == "$(cut -d "/" -f1 <<< ${i})"* ]]; then
853+ CACHEIMAGE=${i}
854+ fi
815855 done
816- '''
817- }
856+ docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:amd64-${META_TAG} -t ${MANIFESTIMAGE}:amd64-latest -t ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
857+ docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:arm64v8-${META_TAG} -t ${MANIFESTIMAGE}:arm64v8-latest -t ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} ${CACHEIMAGE}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
858+ if [ -n "${SEMVER}" ]; then
859+ docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:amd64-${SEMVER} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
860+ docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:arm64v8-${SEMVER} ${CACHEIMAGE}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
861+ fi
862+ done
863+ for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
864+ docker buildx imagetools create -t ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:amd64-latest ${MANIFESTIMAGE}:arm64v8-latest
865+ docker buildx imagetools create -t ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
866+
867+ docker buildx imagetools create -t ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
868+ if [ -n "${SEMVER}" ]; then
869+ docker buildx imagetools create -t ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
870+ fi
871+ done
872+ '''
818873 }
819874 }
820875 }
0 commit comments