@@ -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 {
@@ -189,6 +189,7 @@ pipeline {
189189 env. VERSION_TAG = env. EXT_RELEASE_CLEAN + ' -ls' + env. LS_TAG_NUMBER
190190 env. META_TAG = ' bullseye-' + env. EXT_RELEASE_CLEAN + ' -ls' + env. LS_TAG_NUMBER
191191 env. EXT_RELEASE_TAG = ' bullseye-version-' + env. EXT_RELEASE_CLEAN
192+ 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'
192193 }
193194 }
194195 }
@@ -213,6 +214,7 @@ pipeline {
213214 env. META_TAG = ' bullseye-' + env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -dev-' + env. COMMIT_SHA
214215 env. EXT_RELEASE_TAG = ' bullseye-version-' + env. EXT_RELEASE_CLEAN
215216 env. DOCKERHUB_LINK = ' https://hub.docker.com/r/' + env. DEV_DOCKERHUB_IMAGE + ' /tags/'
217+ 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'
216218 }
217219 }
218220 }
@@ -237,6 +239,7 @@ pipeline {
237239 env. EXT_RELEASE_TAG = ' bullseye-version-' + env. EXT_RELEASE_CLEAN
238240 env. CODE_URL = ' https://github.com/' + env. LS_USER + ' /' + env. LS_REPO + ' /pull/' + env. PULL_REQUEST
239241 env. DOCKERHUB_LINK = ' https://hub.docker.com/r/' + env. PR_DOCKERHUB_IMAGE + ' /tags/'
242+ 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'
240243 }
241244 }
242245 }
@@ -506,8 +509,40 @@ pipeline {
506509 --label \" org.opencontainers.image.title=Baseimage-debian\" \
507510 --label \" org.opencontainers.image.description=baseimage-debian image by linuxserver.io\" \
508511 --no-cache --pull -t ${ IMAGE} :${ META_TAG} --platform=linux/amd64 \
509- --provenance=false --sbom=false \
512+ --provenance=false --sbom=false --builder=container --load \
510513 --build-arg ${ BUILD_VERSION_ARG} =${ EXT_RELEASE} --build-arg VERSION=\" ${ VERSION_TAG} \" --build-arg BUILD_DATE=${ GITHUB_DATE} ."
514+ sh ''' #! /bin/bash
515+ set -e
516+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
517+ for i in "${CACHE[@]}"; do
518+ docker tag ${IMAGE}:${META_TAG} ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
519+ done
520+ '''
521+ withCredentials([
522+ [
523+ $class : ' UsernamePasswordMultiBinding' ,
524+ credentialsId : ' Quay.io-Robot' ,
525+ usernameVariable : ' QUAYUSER' ,
526+ passwordVariable : ' QUAYPASS'
527+ ]
528+ ]) {
529+ retry_backoff(5 ,5 ) {
530+ sh ''' #! /bin/bash
531+ set -e
532+ echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
533+ echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
534+ echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
535+ echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
536+ if [[ "${PACKAGE_CHECK}" != "true" ]]; then
537+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
538+ for i in "${CACHE[@]}"; do
539+ docker push ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} &
540+ done
541+ wait
542+ fi
543+ '''
544+ }
545+ }
511546 }
512547 }
513548 // Build MultiArch Docker containers for push to LS Repo
@@ -537,8 +572,40 @@ pipeline {
537572 --label \" org.opencontainers.image.title=Baseimage-debian\" \
538573 --label \" org.opencontainers.image.description=baseimage-debian image by linuxserver.io\" \
539574 --no-cache --pull -t ${ IMAGE} :amd64-${ META_TAG} --platform=linux/amd64 \
540- --provenance=false --sbom=false \
575+ --provenance=false --sbom=false --builder=container --load \
541576 --build-arg ${ BUILD_VERSION_ARG} =${ EXT_RELEASE} --build-arg VERSION=\" ${ VERSION_TAG} \" --build-arg BUILD_DATE=${ GITHUB_DATE} ."
577+ sh ''' #! /bin/bash
578+ set -e
579+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
580+ for i in "${CACHE[@]}"; do
581+ docker tag ${IMAGE}:amd64-${META_TAG} ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
582+ done
583+ '''
584+ withCredentials([
585+ [
586+ $class : ' UsernamePasswordMultiBinding' ,
587+ credentialsId : ' Quay.io-Robot' ,
588+ usernameVariable : ' QUAYUSER' ,
589+ passwordVariable : ' QUAYPASS'
590+ ]
591+ ]) {
592+ retry_backoff(5 ,5 ) {
593+ sh ''' #! /bin/bash
594+ set -e
595+ echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
596+ echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
597+ echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
598+ echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
599+ if [[ "${PACKAGE_CHECK}" != "true" ]]; then
600+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
601+ for i in "${CACHE[@]}"; do
602+ docker push ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} &
603+ done
604+ wait
605+ fi
606+ '''
607+ }
608+ }
542609 }
543610 }
544611 stage(' Build ARM64' ) {
@@ -547,10 +614,6 @@ pipeline {
547614 }
548615 steps {
549616 echo " Running on node: ${ NODE_NAME} "
550- echo ' Logging into Github'
551- sh ''' #! /bin/bash
552- echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
553- '''
554617 sh " docker buildx build \
555618 --label \" org.opencontainers.image.created=${ GITHUB_DATE} \" \
556619 --label \" org.opencontainers.image.authors=linuxserver.io\" \
@@ -565,18 +628,47 @@ pipeline {
565628 --label \" org.opencontainers.image.title=Baseimage-debian\" \
566629 --label \" org.opencontainers.image.description=baseimage-debian image by linuxserver.io\" \
567630 --no-cache --pull -f Dockerfile.aarch64 -t ${ IMAGE} :arm64v8-${ META_TAG} --platform=linux/arm64 \
568- --provenance=false --sbom=false \
631+ --provenance=false --sbom=false --builder=container --load \
569632 --build-arg ${ BUILD_VERSION_ARG} =${ EXT_RELEASE} --build-arg VERSION=\" ${ VERSION_TAG} \" --build-arg BUILD_DATE=${ GITHUB_DATE} ."
570- sh " docker tag ${ IMAGE} :arm64v8-${ META_TAG} ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${ COMMIT_SHA} -${ BUILD_NUMBER} "
571- retry_backoff(5 ,5 ) {
572- sh " docker push ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${ COMMIT_SHA} -${ BUILD_NUMBER} "
633+ sh ''' #! /bin/bash
634+ set -e
635+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
636+ for i in "${CACHE[@]}"; do
637+ docker tag ${IMAGE}:arm64v8-${META_TAG} ${i}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
638+ done
639+ '''
640+ withCredentials([
641+ [
642+ $class : ' UsernamePasswordMultiBinding' ,
643+ credentialsId : ' Quay.io-Robot' ,
644+ usernameVariable : ' QUAYUSER' ,
645+ passwordVariable : ' QUAYPASS'
646+ ]
647+ ]) {
648+ retry_backoff(5 ,5 ) {
649+ sh ''' #! /bin/bash
650+ set -e
651+ echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
652+ echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
653+ echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
654+ echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
655+ if [[ "${PACKAGE_CHECK}" != "true" ]]; then
656+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
657+ for i in "${CACHE[@]}"; do
658+ docker push ${i}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} &
659+ done
660+ wait
661+ fi
662+ '''
663+ }
573664 }
574665 sh ''' #! /bin/bash
575666 containers=$(docker ps -aq)
576667 if [[ -n "${containers}" ]]; then
577668 docker stop ${containers}
578669 fi
579- docker system prune -af --volumes || : '''
670+ docker system prune -af --volumes || :
671+ '''
580672 }
581673 }
582674 }
@@ -726,37 +818,23 @@ pipeline {
726818 environment name : ' EXIT_STATUS' , value : ' '
727819 }
728820 steps {
729- withCredentials([
730- [
731- $class : ' UsernamePasswordMultiBinding' ,
732- credentialsId : ' Quay.io-Robot' ,
733- usernameVariable : ' QUAYUSER' ,
734- passwordVariable : ' QUAYPASS'
735- ]
736- ]) {
737- retry_backoff(5 ,5 ) {
738- sh ''' #! /bin/bash
739- set -e
740- echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
741- echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
742- echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
743- echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
744- for PUSHIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${IMAGE}"; do
745- docker tag ${IMAGE}:${META_TAG} ${PUSHIMAGE}:${META_TAG}
746- docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:bullseye
747- docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${EXT_RELEASE_TAG}
748- if [ -n "${SEMVER}" ]; then
749- docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${SEMVER}
750- fi
751- docker push ${PUSHIMAGE}:bullseye
752- docker push ${PUSHIMAGE}:${META_TAG}
753- docker push ${PUSHIMAGE}:${EXT_RELEASE_TAG}
754- if [ -n "${SEMVER}" ]; then
755- docker push ${PUSHIMAGE}:${SEMVER}
756- fi
821+ retry_backoff(5 ,5 ) {
822+ sh ''' #! /bin/bash
823+ set -e
824+ for PUSHIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
825+ [[ ${PUSHIMAGE%%/*} =~ \\ . ]] && PUSHIMAGEPLUS="${PUSHIMAGE}" || PUSHIMAGEPLUS="docker.io/${PUSHIMAGE}"
826+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
827+ for i in "${CACHE[@]}"; do
828+ if [[ "${PUSHIMAGEPLUS}" == "$(cut -d "/" -f1 <<< ${i})"* ]]; then
829+ CACHEIMAGE=${i}
830+ fi
757831 done
758- '''
759- }
832+ docker buildx imagetools create --prefer-index=false -t ${PUSHIMAGE}:${META_TAG} -t ${PUSHIMAGE}:bullseye -t ${PUSHIMAGE}:${EXT_RELEASE_TAG} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
833+ if [ -n "${SEMVER}" ]; then
834+ docker buildx imagetools create --prefer-index=false -t ${PUSHIMAGE}:${SEMVER} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
835+ fi
836+ done
837+ '''
760838 }
761839 }
762840 }
@@ -767,57 +845,34 @@ pipeline {
767845 environment name : ' EXIT_STATUS' , value : ' '
768846 }
769847 steps {
770- withCredentials([
771- [
772- $class : ' UsernamePasswordMultiBinding' ,
773- credentialsId : ' Quay.io-Robot' ,
774- usernameVariable : ' QUAYUSER' ,
775- passwordVariable : ' QUAYPASS'
776- ]
777- ]) {
778- retry_backoff(5 ,5 ) {
779- sh ''' #! /bin/bash
780- set -e
781- echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
782- echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
783- echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
784- echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
785- if [ "${CI}" == "false" ]; then
786- docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} --platform=arm64
787- docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
788- fi
789- for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
790- docker tag ${IMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG}
791- docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-bullseye
792- docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
793- docker tag ${IMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
794- docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-bullseye
795- docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
796- if [ -n "${SEMVER}" ]; then
797- docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${SEMVER}
798- docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
799- fi
800- docker push ${MANIFESTIMAGE}:amd64-${META_TAG}
801- docker push ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
802- docker push ${MANIFESTIMAGE}:amd64-bullseye
803- docker push ${MANIFESTIMAGE}:arm64v8-${META_TAG}
804- docker push ${MANIFESTIMAGE}:arm64v8-bullseye
805- docker push ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
806- if [ -n "${SEMVER}" ]; then
807- docker push ${MANIFESTIMAGE}:amd64-${SEMVER}
808- docker push ${MANIFESTIMAGE}:arm64v8-${SEMVER}
809- fi
810- done
811- for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
812- docker buildx imagetools create -t ${MANIFESTIMAGE}:bullseye ${MANIFESTIMAGE}:amd64-bullseye ${MANIFESTIMAGE}:arm64v8-bullseye
813- docker buildx imagetools create -t ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
814- docker buildx imagetools create -t ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
815- if [ -n "${SEMVER}" ]; then
816- docker buildx imagetools create -t ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
817- fi
848+ retry_backoff(5 ,5 ) {
849+ sh ''' #! /bin/bash
850+ set -e
851+ for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
852+ [[ ${MANIFESTIMAGE%%/*} =~ \\ . ]] && MANIFESTIMAGEPLUS="${MANIFESTIMAGE}" || MANIFESTIMAGEPLUS="docker.io/${MANIFESTIMAGE}"
853+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
854+ for i in "${CACHE[@]}"; do
855+ if [[ "${MANIFESTIMAGEPLUS}" == "$(cut -d "/" -f1 <<< ${i})"* ]]; then
856+ CACHEIMAGE=${i}
857+ fi
818858 done
819- '''
820- }
859+ docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:amd64-${META_TAG} -t ${MANIFESTIMAGE}:amd64-bullseye -t ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
860+ docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:arm64v8-${META_TAG} -t ${MANIFESTIMAGE}:arm64v8-bullseye -t ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} ${CACHEIMAGE}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
861+ if [ -n "${SEMVER}" ]; then
862+ docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:amd64-${SEMVER} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
863+ docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:arm64v8-${SEMVER} ${CACHEIMAGE}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
864+ fi
865+ done
866+ for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
867+ docker buildx imagetools create -t ${MANIFESTIMAGE}:bullseye ${MANIFESTIMAGE}:amd64-bullseye ${MANIFESTIMAGE}:arm64v8-bullseye
868+ docker buildx imagetools create -t ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
869+
870+ docker buildx imagetools create -t ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
871+ if [ -n "${SEMVER}" ]; then
872+ docker buildx imagetools create -t ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
873+ fi
874+ done
875+ '''
821876 }
822877 }
823878 }
0 commit comments