Skip to content

Commit fd130a6

Browse files
authored
Merge pull request #301 from linuxserver/monthly
2 parents 2dd4c3b + 1559e39 commit fd130a6

File tree

6 files changed

+384
-199
lines changed

6 files changed

+384
-199
lines changed

Jenkinsfile

Lines changed: 148 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)