@@ -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 = ' 40-' + env. EXT_RELEASE_CLEAN + ' -ls' + env. LS_TAG_NUMBER
193193 env. EXT_RELEASE_TAG = ' 40-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 = ' 40-' + env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -dev-' + env. COMMIT_SHA
216217 env. EXT_RELEASE_TAG = ' 40-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 = ' 40-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,40 @@ pipeline {
508511 --label \" org.opencontainers.image.title=Baseimage-fedora\" \
509512 --label \" org.opencontainers.image.description=baseimage-fedora 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+ wait
544+ fi
545+ '''
546+ }
547+ }
513548 }
514549 }
515550 // Build MultiArch Docker containers for push to LS Repo
@@ -539,8 +574,40 @@ pipeline {
539574 --label \" org.opencontainers.image.title=Baseimage-fedora\" \
540575 --label \" org.opencontainers.image.description=baseimage-fedora image by linuxserver.io\" \
541576 --no-cache --pull -t ${ IMAGE} :amd64-${ META_TAG} --platform=linux/amd64 \
542- --provenance=false --sbom=false \
577+ --provenance=true --sbom=true --builder=container --load \
543578 --build-arg ${ BUILD_VERSION_ARG} =${ EXT_RELEASE} --build-arg VERSION=\" ${ VERSION_TAG} \" --build-arg BUILD_DATE=${ GITHUB_DATE} ."
579+ sh ''' #! /bin/bash
580+ set -e
581+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
582+ for i in "${CACHE[@]}"; do
583+ docker tag ${IMAGE}:amd64-${META_TAG} ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
584+ done
585+ '''
586+ withCredentials([
587+ [
588+ $class : ' UsernamePasswordMultiBinding' ,
589+ credentialsId : ' Quay.io-Robot' ,
590+ usernameVariable : ' QUAYUSER' ,
591+ passwordVariable : ' QUAYPASS'
592+ ]
593+ ]) {
594+ retry_backoff(5 ,5 ) {
595+ sh ''' #! /bin/bash
596+ set -e
597+ echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
598+ echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
599+ echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
600+ echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
601+ if [[ "${PACKAGE_CHECK}" != "true" ]]; then
602+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
603+ for i in "${CACHE[@]}"; do
604+ docker push ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} &
605+ done
606+ wait
607+ fi
608+ '''
609+ }
610+ }
544611 }
545612 }
546613 stage(' Build ARM64' ) {
@@ -549,10 +616,6 @@ pipeline {
549616 }
550617 steps {
551618 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- '''
556619 sh " docker buildx build \
557620 --label \" org.opencontainers.image.created=${ GITHUB_DATE} \" \
558621 --label \" org.opencontainers.image.authors=linuxserver.io\" \
@@ -567,18 +630,47 @@ pipeline {
567630 --label \" org.opencontainers.image.title=Baseimage-fedora\" \
568631 --label \" org.opencontainers.image.description=baseimage-fedora image by linuxserver.io\" \
569632 --no-cache --pull -f Dockerfile.aarch64 -t ${ IMAGE} :arm64v8-${ META_TAG} --platform=linux/arm64 \
570- --provenance=false --sbom=false \
633+ --provenance=true --sbom=true --builder=container --load \
571634 --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} "
635+ sh ''' #! /bin/bash
636+ set -e
637+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
638+ for i in "${CACHE[@]}"; do
639+ docker tag ${IMAGE}:arm64v8-${META_TAG} ${i}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
640+ done
641+ '''
642+ withCredentials([
643+ [
644+ $class : ' UsernamePasswordMultiBinding' ,
645+ credentialsId : ' Quay.io-Robot' ,
646+ usernameVariable : ' QUAYUSER' ,
647+ passwordVariable : ' QUAYPASS'
648+ ]
649+ ]) {
650+ retry_backoff(5 ,5 ) {
651+ sh ''' #! /bin/bash
652+ set -e
653+ echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
654+ echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
655+ echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
656+ echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
657+ if [[ "${PACKAGE_CHECK}" != "true" ]]; then
658+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
659+ for i in "${CACHE[@]}"; do
660+ docker push ${i}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} &
661+ done
662+ wait
663+ fi
664+ '''
665+ }
575666 }
576667 sh ''' #! /bin/bash
577668 containers=$(docker ps -aq)
578669 if [[ -n "${containers}" ]]; then
579670 docker stop ${containers}
580671 fi
581- docker system prune -af --volumes || : '''
672+ docker system prune -af --volumes || :
673+ '''
582674 }
583675 }
584676 }
@@ -728,37 +820,23 @@ pipeline {
728820 environment name : ' EXIT_STATUS' , value : ' '
729821 }
730822 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}:40
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}:40
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
823+ retry_backoff(5 ,5 ) {
824+ sh ''' #! /bin/bash
825+ set -e
826+ for PUSHIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
827+ [[ ${PUSHIMAGE%%/*} =~ \\ . ]] && PUSHIMAGEPLUS="${PUSHIMAGE}" || PUSHIMAGEPLUS="docker.io/${PUSHIMAGE}"
828+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
829+ for i in "${CACHE[@]}"; do
830+ if [[ "${PUSHIMAGEPLUS}" == "$(cut -d "/" -f1 <<< ${i})"* ]]; then
831+ CACHEIMAGE=${i}
832+ fi
759833 done
760- '''
761- }
834+ docker buildx imagetools create --prefer-index=false -t ${PUSHIMAGE}:${META_TAG} -t ${PUSHIMAGE}:40 -t ${PUSHIMAGE}:${EXT_RELEASE_TAG} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
835+ if [ -n "${SEMVER}" ]; then
836+ docker buildx imagetools create --prefer-index=false -t ${PUSHIMAGE}:${SEMVER} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
837+ fi
838+ done
839+ '''
762840 }
763841 }
764842 }
@@ -769,57 +847,34 @@ pipeline {
769847 environment name : ' EXIT_STATUS' , value : ' '
770848 }
771849 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-40
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-40
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-40
805- docker push ${MANIFESTIMAGE}:arm64v8-${META_TAG}
806- docker push ${MANIFESTIMAGE}:arm64v8-40
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}:40 ${MANIFESTIMAGE}:amd64-40 ${MANIFESTIMAGE}:arm64v8-40
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
850+ retry_backoff(5 ,5 ) {
851+ sh ''' #! /bin/bash
852+ set -e
853+ for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
854+ [[ ${MANIFESTIMAGE%%/*} =~ \\ . ]] && MANIFESTIMAGEPLUS="${MANIFESTIMAGE}" || MANIFESTIMAGEPLUS="docker.io/${MANIFESTIMAGE}"
855+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
856+ for i in "${CACHE[@]}"; do
857+ if [[ "${MANIFESTIMAGEPLUS}" == "$(cut -d "/" -f1 <<< ${i})"* ]]; then
858+ CACHEIMAGE=${i}
859+ fi
820860 done
821- '''
822- }
861+ docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:amd64-${META_TAG} -t ${MANIFESTIMAGE}:amd64-40 -t ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
862+ docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:arm64v8-${META_TAG} -t ${MANIFESTIMAGE}:arm64v8-40 -t ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} ${CACHEIMAGE}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
863+ if [ -n "${SEMVER}" ]; then
864+ docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:amd64-${SEMVER} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
865+ docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:arm64v8-${SEMVER} ${CACHEIMAGE}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
866+ fi
867+ done
868+ for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
869+ docker buildx imagetools create -t ${MANIFESTIMAGE}:40 ${MANIFESTIMAGE}:amd64-40 ${MANIFESTIMAGE}:arm64v8-40
870+ docker buildx imagetools create -t ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
871+
872+ docker buildx imagetools create -t ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
873+ if [ -n "${SEMVER}" ]; then
874+ docker buildx imagetools create -t ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
875+ fi
876+ done
877+ '''
823878 }
824879 }
825880 }
@@ -847,7 +902,7 @@ pipeline {
847902 echo '{"tag_name":"'${META_TAG}'",\
848903 "target_commitish": "master",\
849904 "name": "'${META_TAG}'",\
850- "body": "**LinuxServer Changes:**\\ n\\ n'${LS_RELEASE_NOTES}'\\ n\\ n**Remote Changes:**\\ n\\ n' > start
905+ "body": "**CI Report:** \\ n \\ n'${CI_URL:-N/A}' \\ n \\ n** LinuxServer Changes:**\\ n\\ n'${LS_RELEASE_NOTES}'\\ n\\ n**Remote Changes:**\\ n\\ n' > start
851906 printf '","draft": false,"prerelease": false}' >> releasebody.json
852907 paste -d'\\ 0' start releasebody.json > releasebody.json.done
853908 curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/releases -d @releasebody.json.done'''
0 commit comments