@@ -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 {
@@ -195,6 +195,7 @@ pipeline {
195195 env. VERSION_TAG = env. EXT_RELEASE_CLEAN + ' -ls' + env. LS_TAG_NUMBER
196196 env. META_TAG = env. EXT_RELEASE_CLEAN + ' -ls' + env. LS_TAG_NUMBER
197197 env. EXT_RELEASE_TAG = ' version-' + env. EXT_RELEASE_CLEAN
198+ 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'
198199 }
199200 }
200201 }
@@ -219,6 +220,7 @@ pipeline {
219220 env. META_TAG = env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -dev-' + env. COMMIT_SHA
220221 env. EXT_RELEASE_TAG = ' version-' + env. EXT_RELEASE_CLEAN
221222 env. DOCKERHUB_LINK = ' https://hub.docker.com/r/' + env. DEV_DOCKERHUB_IMAGE + ' /tags/'
223+ 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'
222224 }
223225 }
224226 }
@@ -243,6 +245,7 @@ pipeline {
243245 env. EXT_RELEASE_TAG = ' version-' + env. EXT_RELEASE_CLEAN
244246 env. CODE_URL = ' https://github.com/' + env. LS_USER + ' /' + env. LS_REPO + ' /pull/' + env. PULL_REQUEST
245247 env. DOCKERHUB_LINK = ' https://hub.docker.com/r/' + env. PR_DOCKERHUB_IMAGE + ' /tags/'
248+ 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'
246249 }
247250 }
248251 }
@@ -513,8 +516,40 @@ pipeline {
513516 --label \" org.opencontainers.image.title=Socket-proxy\" \
514517 --label \" org.opencontainers.image.description=socket-proxy image by linuxserver.io\" \
515518 --no-cache --pull -t ${ IMAGE} :${ META_TAG} --platform=linux/amd64 \
516- --provenance=false --sbom=false \
519+ --provenance=false --sbom=false --builder=container --load \
517520 --build-arg ${ BUILD_VERSION_ARG} =${ EXT_RELEASE} --build-arg VERSION=\" ${ VERSION_TAG} \" --build-arg BUILD_DATE=${ GITHUB_DATE} ."
521+ sh ''' #! /bin/bash
522+ set -e
523+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
524+ for i in "${CACHE[@]}"; do
525+ docker tag ${IMAGE}:${META_TAG} ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
526+ done
527+ '''
528+ withCredentials([
529+ [
530+ $class : ' UsernamePasswordMultiBinding' ,
531+ credentialsId : ' Quay.io-Robot' ,
532+ usernameVariable : ' QUAYUSER' ,
533+ passwordVariable : ' QUAYPASS'
534+ ]
535+ ]) {
536+ retry_backoff(5 ,5 ) {
537+ sh ''' #! /bin/bash
538+ set -e
539+ echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
540+ echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
541+ echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
542+ echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
543+ if [[ "${PACKAGE_CHECK}" != "true" ]]; then
544+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
545+ for i in "${CACHE[@]}"; do
546+ docker push ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} &
547+ done
548+ wait
549+ fi
550+ '''
551+ }
552+ }
518553 }
519554 }
520555 // Build MultiArch Docker containers for push to LS Repo
@@ -545,8 +580,40 @@ pipeline {
545580 --label \" org.opencontainers.image.title=Socket-proxy\" \
546581 --label \" org.opencontainers.image.description=socket-proxy image by linuxserver.io\" \
547582 --no-cache --pull -t ${ IMAGE} :amd64-${ META_TAG} --platform=linux/amd64 \
548- --provenance=false --sbom=false \
583+ --provenance=false --sbom=false --builder=container --load \
549584 --build-arg ${ BUILD_VERSION_ARG} =${ EXT_RELEASE} --build-arg VERSION=\" ${ VERSION_TAG} \" --build-arg BUILD_DATE=${ GITHUB_DATE} ."
585+ sh ''' #! /bin/bash
586+ set -e
587+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
588+ for i in "${CACHE[@]}"; do
589+ docker tag ${IMAGE}:amd64-${META_TAG} ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
590+ done
591+ '''
592+ withCredentials([
593+ [
594+ $class : ' UsernamePasswordMultiBinding' ,
595+ credentialsId : ' Quay.io-Robot' ,
596+ usernameVariable : ' QUAYUSER' ,
597+ passwordVariable : ' QUAYPASS'
598+ ]
599+ ]) {
600+ retry_backoff(5 ,5 ) {
601+ sh ''' #! /bin/bash
602+ set -e
603+ echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
604+ echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
605+ echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
606+ echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
607+ if [[ "${PACKAGE_CHECK}" != "true" ]]; then
608+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
609+ for i in "${CACHE[@]}"; do
610+ docker push ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} &
611+ done
612+ wait
613+ fi
614+ '''
615+ }
616+ }
550617 }
551618 }
552619 stage(' Build ARM64' ) {
@@ -555,10 +622,6 @@ pipeline {
555622 }
556623 steps {
557624 echo " Running on node: ${ NODE_NAME} "
558- echo ' Logging into Github'
559- sh ''' #! /bin/bash
560- echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
561- '''
562625 sh " sed -r -i 's|(^FROM .*)|\\ 1\\ n\\ nENV LSIO_FIRST_PARTY=true|g' Dockerfile.aarch64"
563626 sh " docker buildx build \
564627 --label \" org.opencontainers.image.created=${ GITHUB_DATE} \" \
@@ -574,18 +637,47 @@ pipeline {
574637 --label \" org.opencontainers.image.title=Socket-proxy\" \
575638 --label \" org.opencontainers.image.description=socket-proxy image by linuxserver.io\" \
576639 --no-cache --pull -f Dockerfile.aarch64 -t ${ IMAGE} :arm64v8-${ META_TAG} --platform=linux/arm64 \
577- --provenance=false --sbom=false \
640+ --provenance=false --sbom=false --builder=container --load \
578641 --build-arg ${ BUILD_VERSION_ARG} =${ EXT_RELEASE} --build-arg VERSION=\" ${ VERSION_TAG} \" --build-arg BUILD_DATE=${ GITHUB_DATE} ."
579- sh " docker tag ${ IMAGE} :arm64v8-${ META_TAG} ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${ COMMIT_SHA} -${ BUILD_NUMBER} "
580- retry_backoff(5 ,5 ) {
581- sh " docker push ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${ COMMIT_SHA} -${ BUILD_NUMBER} "
642+ sh ''' #! /bin/bash
643+ set -e
644+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
645+ for i in "${CACHE[@]}"; do
646+ docker tag ${IMAGE}:arm64v8-${META_TAG} ${i}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
647+ done
648+ '''
649+ withCredentials([
650+ [
651+ $class : ' UsernamePasswordMultiBinding' ,
652+ credentialsId : ' Quay.io-Robot' ,
653+ usernameVariable : ' QUAYUSER' ,
654+ passwordVariable : ' QUAYPASS'
655+ ]
656+ ]) {
657+ retry_backoff(5 ,5 ) {
658+ sh ''' #! /bin/bash
659+ set -e
660+ echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
661+ echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
662+ echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
663+ echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
664+ if [[ "${PACKAGE_CHECK}" != "true" ]]; then
665+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
666+ for i in "${CACHE[@]}"; do
667+ docker push ${i}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} &
668+ done
669+ wait
670+ fi
671+ '''
672+ }
582673 }
583674 sh ''' #! /bin/bash
584675 containers=$(docker ps -aq)
585676 if [[ -n "${containers}" ]]; then
586677 docker stop ${containers}
587678 fi
588- docker system prune -af --volumes || : '''
679+ docker system prune -af --volumes || :
680+ '''
589681 }
590682 }
591683 }
@@ -735,37 +827,23 @@ pipeline {
735827 environment name : ' EXIT_STATUS' , value : ' '
736828 }
737829 steps {
738- withCredentials([
739- [
740- $class : ' UsernamePasswordMultiBinding' ,
741- credentialsId : ' Quay.io-Robot' ,
742- usernameVariable : ' QUAYUSER' ,
743- passwordVariable : ' QUAYPASS'
744- ]
745- ]) {
746- retry_backoff(5 ,5 ) {
747- sh ''' #! /bin/bash
748- set -e
749- echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
750- echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
751- echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
752- echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
753- for PUSHIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${IMAGE}"; do
754- docker tag ${IMAGE}:${META_TAG} ${PUSHIMAGE}:${META_TAG}
755- docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:latest
756- docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${EXT_RELEASE_TAG}
757- if [ -n "${SEMVER}" ]; then
758- docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${SEMVER}
759- fi
760- docker push ${PUSHIMAGE}:latest
761- docker push ${PUSHIMAGE}:${META_TAG}
762- docker push ${PUSHIMAGE}:${EXT_RELEASE_TAG}
763- if [ -n "${SEMVER}" ]; then
764- docker push ${PUSHIMAGE}:${SEMVER}
765- fi
830+ retry_backoff(5 ,5 ) {
831+ sh ''' #! /bin/bash
832+ set -e
833+ for PUSHIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
834+ [[ ${PUSHIMAGE%%/*} =~ \\ . ]] && PUSHIMAGEPLUS="${PUSHIMAGE}" || PUSHIMAGEPLUS="docker.io/${PUSHIMAGE}"
835+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
836+ for i in "${CACHE[@]}"; do
837+ if [[ "${PUSHIMAGEPLUS}" == "$(cut -d "/" -f1 <<< ${i})"* ]]; then
838+ CACHEIMAGE=${i}
839+ fi
766840 done
767- '''
768- }
841+ 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}
842+ if [ -n "${SEMVER}" ]; then
843+ docker buildx imagetools create --prefer-index=false -t ${PUSHIMAGE}:${SEMVER} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
844+ fi
845+ done
846+ '''
769847 }
770848 }
771849 }
@@ -776,57 +854,34 @@ pipeline {
776854 environment name : ' EXIT_STATUS' , value : ' '
777855 }
778856 steps {
779- withCredentials([
780- [
781- $class : ' UsernamePasswordMultiBinding' ,
782- credentialsId : ' Quay.io-Robot' ,
783- usernameVariable : ' QUAYUSER' ,
784- passwordVariable : ' QUAYPASS'
785- ]
786- ]) {
787- retry_backoff(5 ,5 ) {
788- sh ''' #! /bin/bash
789- set -e
790- echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
791- echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
792- echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
793- echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
794- if [ "${CI}" == "false" ]; then
795- docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} --platform=arm64
796- docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
797- fi
798- for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
799- docker tag ${IMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG}
800- docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-latest
801- docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
802- docker tag ${IMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
803- docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-latest
804- docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
805- if [ -n "${SEMVER}" ]; then
806- docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${SEMVER}
807- docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
808- fi
809- docker push ${MANIFESTIMAGE}:amd64-${META_TAG}
810- docker push ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
811- docker push ${MANIFESTIMAGE}:amd64-latest
812- docker push ${MANIFESTIMAGE}:arm64v8-${META_TAG}
813- docker push ${MANIFESTIMAGE}:arm64v8-latest
814- docker push ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
815- if [ -n "${SEMVER}" ]; then
816- docker push ${MANIFESTIMAGE}:amd64-${SEMVER}
817- docker push ${MANIFESTIMAGE}:arm64v8-${SEMVER}
818- fi
819- done
820- for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
821- docker buildx imagetools create -t ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:amd64-latest ${MANIFESTIMAGE}:arm64v8-latest
822- docker buildx imagetools create -t ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
823- docker buildx imagetools create -t ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
824- if [ -n "${SEMVER}" ]; then
825- docker buildx imagetools create -t ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
826- fi
857+ retry_backoff(5 ,5 ) {
858+ sh ''' #! /bin/bash
859+ set -e
860+ for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
861+ [[ ${MANIFESTIMAGE%%/*} =~ \\ . ]] && MANIFESTIMAGEPLUS="${MANIFESTIMAGE}" || MANIFESTIMAGEPLUS="docker.io/${MANIFESTIMAGE}"
862+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
863+ for i in "${CACHE[@]}"; do
864+ if [[ "${MANIFESTIMAGEPLUS}" == "$(cut -d "/" -f1 <<< ${i})"* ]]; then
865+ CACHEIMAGE=${i}
866+ fi
827867 done
828- '''
829- }
868+ 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}
869+ 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}
870+ if [ -n "${SEMVER}" ]; then
871+ docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:amd64-${SEMVER} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
872+ docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:arm64v8-${SEMVER} ${CACHEIMAGE}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
873+ fi
874+ done
875+ for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
876+ docker buildx imagetools create -t ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:amd64-latest ${MANIFESTIMAGE}:arm64v8-latest
877+ docker buildx imagetools create -t ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
878+
879+ docker buildx imagetools create -t ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
880+ if [ -n "${SEMVER}" ]; then
881+ docker buildx imagetools create -t ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
882+ fi
883+ done
884+ '''
830885 }
831886 }
832887 }
0 commit comments