@@ -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 = env. EXT_RELEASE_CLEAN + ' -ls' + env. LS_TAG_NUMBER
191191 env. EXT_RELEASE_TAG = ' 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 = env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -dev-' + env. COMMIT_SHA
214215 env. EXT_RELEASE_TAG = ' 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 = ' 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 }
@@ -256,7 +259,7 @@ pipeline {
256259 --label \" org.opencontainers.image.ref.name=${ COMMIT_SHA} \" \
257260 --label \" org.opencontainers.image.title=Jenkins-builder\" \
258261 --label \" org.opencontainers.image.description=jenkins-builder image by linuxserver.io\" \
259- --provenance=false --sbom=false \
262+ --provenance=false --sbom=false --builder=default \
260263 --no-cache --pull -t jenkinslocal:${ COMMIT_SHA} -${ BUILD_NUMBER} --platform=linux/amd64 ."
261264 }
262265 }
@@ -526,8 +529,40 @@ pipeline {
526529 --label \" org.opencontainers.image.title=Jenkins-builder\" \
527530 --label \" org.opencontainers.image.description=jenkins-builder image by linuxserver.io\" \
528531 --no-cache --pull -t ${ IMAGE} :${ META_TAG} --platform=linux/amd64 \
529- --provenance=false --sbom=false \
532+ --provenance=false --sbom=false --builder=container --load \
530533 --build-arg ${ BUILD_VERSION_ARG} =${ EXT_RELEASE} --build-arg VERSION=\" ${ VERSION_TAG} \" --build-arg BUILD_DATE=${ GITHUB_DATE} ."
534+ sh ''' #! /bin/bash
535+ set -e
536+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
537+ for i in "${CACHE[@]}"; do
538+ docker tag ${IMAGE}:${META_TAG} ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
539+ done
540+ '''
541+ withCredentials([
542+ [
543+ $class : ' UsernamePasswordMultiBinding' ,
544+ credentialsId : ' Quay.io-Robot' ,
545+ usernameVariable : ' QUAYUSER' ,
546+ passwordVariable : ' QUAYPASS'
547+ ]
548+ ]) {
549+ retry_backoff(5 ,5 ) {
550+ sh ''' #! /bin/bash
551+ set -e
552+ echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
553+ echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
554+ echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
555+ echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
556+ if [[ "${PACKAGE_CHECK}" != "true" ]]; then
557+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
558+ for i in "${CACHE[@]}"; do
559+ docker push ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} &
560+ done
561+ wait
562+ fi
563+ '''
564+ }
565+ }
531566 }
532567 }
533568 // Build MultiArch Docker containers for push to LS Repo
@@ -558,8 +593,40 @@ pipeline {
558593 --label \" org.opencontainers.image.title=Jenkins-builder\" \
559594 --label \" org.opencontainers.image.description=jenkins-builder image by linuxserver.io\" \
560595 --no-cache --pull -t ${ IMAGE} :amd64-${ META_TAG} --platform=linux/amd64 \
561- --provenance=false --sbom=false \
596+ --provenance=false --sbom=false --builder=container --load \
562597 --build-arg ${ BUILD_VERSION_ARG} =${ EXT_RELEASE} --build-arg VERSION=\" ${ VERSION_TAG} \" --build-arg BUILD_DATE=${ GITHUB_DATE} ."
598+ sh ''' #! /bin/bash
599+ set -e
600+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
601+ for i in "${CACHE[@]}"; do
602+ docker tag ${IMAGE}:amd64-${META_TAG} ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
603+ done
604+ '''
605+ withCredentials([
606+ [
607+ $class : ' UsernamePasswordMultiBinding' ,
608+ credentialsId : ' Quay.io-Robot' ,
609+ usernameVariable : ' QUAYUSER' ,
610+ passwordVariable : ' QUAYPASS'
611+ ]
612+ ]) {
613+ retry_backoff(5 ,5 ) {
614+ sh ''' #! /bin/bash
615+ set -e
616+ echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
617+ echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
618+ echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
619+ echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
620+ if [[ "${PACKAGE_CHECK}" != "true" ]]; then
621+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
622+ for i in "${CACHE[@]}"; do
623+ docker push ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} &
624+ done
625+ wait
626+ fi
627+ '''
628+ }
629+ }
563630 }
564631 }
565632 stage(' Build ARM64' ) {
@@ -568,10 +635,6 @@ pipeline {
568635 }
569636 steps {
570637 echo " Running on node: ${ NODE_NAME} "
571- echo ' Logging into Github'
572- sh ''' #! /bin/bash
573- echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
574- '''
575638 sh " sed -r -i 's|(^FROM .*)|\\ 1\\ n\\ nENV LSIO_FIRST_PARTY=true|g' Dockerfile.aarch64"
576639 sh " docker buildx build \
577640 --label \" org.opencontainers.image.created=${ GITHUB_DATE} \" \
@@ -587,18 +650,47 @@ pipeline {
587650 --label \" org.opencontainers.image.title=Jenkins-builder\" \
588651 --label \" org.opencontainers.image.description=jenkins-builder image by linuxserver.io\" \
589652 --no-cache --pull -f Dockerfile.aarch64 -t ${ IMAGE} :arm64v8-${ META_TAG} --platform=linux/arm64 \
590- --provenance=false --sbom=false \
653+ --provenance=false --sbom=false --builder=container --load \
591654 --build-arg ${ BUILD_VERSION_ARG} =${ EXT_RELEASE} --build-arg VERSION=\" ${ VERSION_TAG} \" --build-arg BUILD_DATE=${ GITHUB_DATE} ."
592- sh " docker tag ${ IMAGE} :arm64v8-${ META_TAG} ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${ COMMIT_SHA} -${ BUILD_NUMBER} "
593- retry_backoff(5 ,5 ) {
594- sh " docker push ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${ COMMIT_SHA} -${ BUILD_NUMBER} "
655+ sh ''' #! /bin/bash
656+ set -e
657+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
658+ for i in "${CACHE[@]}"; do
659+ docker tag ${IMAGE}:arm64v8-${META_TAG} ${i}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
660+ done
661+ '''
662+ withCredentials([
663+ [
664+ $class : ' UsernamePasswordMultiBinding' ,
665+ credentialsId : ' Quay.io-Robot' ,
666+ usernameVariable : ' QUAYUSER' ,
667+ passwordVariable : ' QUAYPASS'
668+ ]
669+ ]) {
670+ retry_backoff(5 ,5 ) {
671+ sh ''' #! /bin/bash
672+ set -e
673+ echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
674+ echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
675+ echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
676+ echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
677+ if [[ "${PACKAGE_CHECK}" != "true" ]]; then
678+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
679+ for i in "${CACHE[@]}"; do
680+ docker push ${i}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} &
681+ done
682+ wait
683+ fi
684+ '''
685+ }
595686 }
596687 sh ''' #! /bin/bash
597688 containers=$(docker ps -aq)
598689 if [[ -n "${containers}" ]]; then
599690 docker stop ${containers}
600691 fi
601- docker system prune -af --volumes || : '''
692+ docker system prune -af --volumes || :
693+ '''
602694 }
603695 }
604696 }
@@ -748,37 +840,23 @@ pipeline {
748840 environment name : ' EXIT_STATUS' , value : ' '
749841 }
750842 steps {
751- withCredentials([
752- [
753- $class : ' UsernamePasswordMultiBinding' ,
754- credentialsId : ' Quay.io-Robot' ,
755- usernameVariable : ' QUAYUSER' ,
756- passwordVariable : ' QUAYPASS'
757- ]
758- ]) {
759- retry_backoff(5 ,5 ) {
760- sh ''' #! /bin/bash
761- set -e
762- echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
763- echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
764- echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
765- echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
766- for PUSHIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${IMAGE}"; do
767- docker tag ${IMAGE}:${META_TAG} ${PUSHIMAGE}:${META_TAG}
768- docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:latest
769- docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${EXT_RELEASE_TAG}
770- if [ -n "${SEMVER}" ]; then
771- docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${SEMVER}
772- fi
773- docker push ${PUSHIMAGE}:latest
774- docker push ${PUSHIMAGE}:${META_TAG}
775- docker push ${PUSHIMAGE}:${EXT_RELEASE_TAG}
776- if [ -n "${SEMVER}" ]; then
777- docker push ${PUSHIMAGE}:${SEMVER}
778- fi
843+ retry_backoff(5 ,5 ) {
844+ sh ''' #! /bin/bash
845+ set -e
846+ for PUSHIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${IMAGE}"; do
847+ [[ ${PUSHIMAGE%%/*} =~ \\ . ]] && PUSHIMAGEPLUS="${PUSHIMAGE}" || PUSHIMAGEPLUS="docker.io/${PUSHIMAGE}"
848+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
849+ for i in "${CACHE[@]}"; do
850+ if [[ "${PUSHIMAGEPLUS}" == "$(cut -d "/" -f1 <<< ${i})"* ]]; then
851+ CACHEIMAGE=${i}
852+ fi
779853 done
780- '''
781- }
854+ 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}
855+ if [ -n "${SEMVER}" ]; then
856+ docker buildx imagetools create --prefer-index=false -t ${PUSHIMAGE}:${SEMVER} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
857+ fi
858+ done
859+ '''
782860 }
783861 }
784862 }
@@ -789,57 +867,34 @@ pipeline {
789867 environment name : ' EXIT_STATUS' , value : ' '
790868 }
791869 steps {
792- withCredentials([
793- [
794- $class : ' UsernamePasswordMultiBinding' ,
795- credentialsId : ' Quay.io-Robot' ,
796- usernameVariable : ' QUAYUSER' ,
797- passwordVariable : ' QUAYPASS'
798- ]
799- ]) {
800- retry_backoff(5 ,5 ) {
801- sh ''' #! /bin/bash
802- set -e
803- echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
804- echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
805- echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
806- echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
807- if [ "${CI}" == "false" ]; then
808- docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} --platform=arm64
809- docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
810- fi
811- for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
812- docker tag ${IMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG}
813- docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-latest
814- docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
815- docker tag ${IMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
816- docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-latest
817- docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
818- if [ -n "${SEMVER}" ]; then
819- docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${SEMVER}
820- docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
821- fi
822- docker push ${MANIFESTIMAGE}:amd64-${META_TAG}
823- docker push ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
824- docker push ${MANIFESTIMAGE}:amd64-latest
825- docker push ${MANIFESTIMAGE}:arm64v8-${META_TAG}
826- docker push ${MANIFESTIMAGE}:arm64v8-latest
827- docker push ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
828- if [ -n "${SEMVER}" ]; then
829- docker push ${MANIFESTIMAGE}:amd64-${SEMVER}
830- docker push ${MANIFESTIMAGE}:arm64v8-${SEMVER}
831- fi
832- done
833- for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
834- docker buildx imagetools create -t ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:amd64-latest ${MANIFESTIMAGE}:arm64v8-latest
835- docker buildx imagetools create -t ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
836- docker buildx imagetools create -t ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
837- if [ -n "${SEMVER}" ]; then
838- docker buildx imagetools create -t ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
839- fi
870+ retry_backoff(5 ,5 ) {
871+ sh ''' #! /bin/bash
872+ set -e
873+ for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
874+ [[ ${MANIFESTIMAGE%%/*} =~ \\ . ]] && MANIFESTIMAGEPLUS="${MANIFESTIMAGE}" || MANIFESTIMAGEPLUS="docker.io/${MANIFESTIMAGE}"
875+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
876+ for i in "${CACHE[@]}"; do
877+ if [[ "${MANIFESTIMAGEPLUS}" == "$(cut -d "/" -f1 <<< ${i})"* ]]; then
878+ CACHEIMAGE=${i}
879+ fi
840880 done
841- '''
842- }
881+ 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}
882+ 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}
883+ if [ -n "${SEMVER}" ]; then
884+ docker imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:amd64-${SEMVER} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
885+ docker imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:arm64v8-${SEMVER} ${CACHEIMAGE}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
886+ fi
887+ done
888+ for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
889+ docker buildx imagetools create -t ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:amd64-latest ${MANIFESTIMAGE}:arm64v8-latest
890+ docker buildx imagetools create -t ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
891+
892+ docker buildx imagetools create -t ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
893+ if [ -n "${SEMVER}" ]; then
894+ docker buildx imagetools create -t ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
895+ fi
896+ done
897+ '''
843898 }
844899 }
845900 }
0 commit comments