Skip to content

Commit 0399cb2

Browse files
Bot Updating Templated Files
1 parent 8a2afa3 commit 0399cb2

File tree

1 file changed

+148
-93
lines changed

1 file changed

+148
-93
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 {
@@ -191,6 +191,7 @@ pipeline {
191191
env.VERSION_TAG = env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
192192
env.META_TAG = 'alpine320-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
193193
env.EXT_RELEASE_TAG = 'alpine320-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 = 'alpine320-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA
216217
env.EXT_RELEASE_TAG = 'alpine320-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 = 'alpine320-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
}
@@ -509,8 +512,40 @@ pipeline {
509512
--label \"org.opencontainers.image.title=Python\" \
510513
--label \"org.opencontainers.image.description=python image by linuxserver.io\" \
511514
--no-cache --pull -t ${IMAGE}:${META_TAG} --platform=linux/amd64 \
512-
--provenance=false --sbom=false \
515+
--provenance=false --sbom=false --builder=container --load \
513516
--build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${VERSION_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ."
517+
sh '''#! /bin/bash
518+
set -e
519+
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
520+
for i in "${CACHE[@]}"; do
521+
docker tag ${IMAGE}:${META_TAG} ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
522+
done
523+
'''
524+
withCredentials([
525+
[
526+
$class: 'UsernamePasswordMultiBinding',
527+
credentialsId: 'Quay.io-Robot',
528+
usernameVariable: 'QUAYUSER',
529+
passwordVariable: 'QUAYPASS'
530+
]
531+
]) {
532+
retry_backoff(5,5) {
533+
sh '''#! /bin/bash
534+
set -e
535+
echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
536+
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
537+
echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
538+
echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
539+
if [[ "${PACKAGE_CHECK}" != "true" ]]; then
540+
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
541+
for i in "${CACHE[@]}"; do
542+
docker push ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} &
543+
done
544+
wait
545+
fi
546+
'''
547+
}
548+
}
514549
}
515550
}
516551
// Build MultiArch Docker containers for push to LS Repo
@@ -540,8 +575,40 @@ pipeline {
540575
--label \"org.opencontainers.image.title=Python\" \
541576
--label \"org.opencontainers.image.description=python image by linuxserver.io\" \
542577
--no-cache --pull -t ${IMAGE}:amd64-${META_TAG} --platform=linux/amd64 \
543-
--provenance=false --sbom=false \
578+
--provenance=false --sbom=false --builder=container --load \
544579
--build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${VERSION_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ."
580+
sh '''#! /bin/bash
581+
set -e
582+
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
583+
for i in "${CACHE[@]}"; do
584+
docker tag ${IMAGE}:amd64-${META_TAG} ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
585+
done
586+
'''
587+
withCredentials([
588+
[
589+
$class: 'UsernamePasswordMultiBinding',
590+
credentialsId: 'Quay.io-Robot',
591+
usernameVariable: 'QUAYUSER',
592+
passwordVariable: 'QUAYPASS'
593+
]
594+
]) {
595+
retry_backoff(5,5) {
596+
sh '''#! /bin/bash
597+
set -e
598+
echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
599+
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
600+
echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
601+
echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
602+
if [[ "${PACKAGE_CHECK}" != "true" ]]; then
603+
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
604+
for i in "${CACHE[@]}"; do
605+
docker push ${i}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} &
606+
done
607+
wait
608+
fi
609+
'''
610+
}
611+
}
545612
}
546613
}
547614
stage('Build ARM64') {
@@ -550,10 +617,6 @@ pipeline {
550617
}
551618
steps {
552619
echo "Running on node: ${NODE_NAME}"
553-
echo 'Logging into Github'
554-
sh '''#! /bin/bash
555-
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
556-
'''
557620
sh "sed -r -i 's|(^FROM .*)|\\1\\n\\nENV LSIO_FIRST_PARTY=true|g' Dockerfile.aarch64"
558621
sh "docker buildx build \
559622
--label \"org.opencontainers.image.created=${GITHUB_DATE}\" \
@@ -569,18 +632,47 @@ pipeline {
569632
--label \"org.opencontainers.image.title=Python\" \
570633
--label \"org.opencontainers.image.description=python image by linuxserver.io\" \
571634
--no-cache --pull -f Dockerfile.aarch64 -t ${IMAGE}:arm64v8-${META_TAG} --platform=linux/arm64 \
572-
--provenance=false --sbom=false \
635+
--provenance=false --sbom=false --builder=container --load \
573636
--build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${VERSION_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ."
574-
sh "docker tag ${IMAGE}:arm64v8-${META_TAG} ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}"
575-
retry_backoff(5,5) {
576-
sh "docker push ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}"
637+
sh '''#! /bin/bash
638+
set -e
639+
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
640+
for i in "${CACHE[@]}"; do
641+
docker tag ${IMAGE}:arm64v8-${META_TAG} ${i}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
642+
done
643+
'''
644+
withCredentials([
645+
[
646+
$class: 'UsernamePasswordMultiBinding',
647+
credentialsId: 'Quay.io-Robot',
648+
usernameVariable: 'QUAYUSER',
649+
passwordVariable: 'QUAYPASS'
650+
]
651+
]) {
652+
retry_backoff(5,5) {
653+
sh '''#! /bin/bash
654+
set -e
655+
echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
656+
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
657+
echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
658+
echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
659+
if [[ "${PACKAGE_CHECK}" != "true" ]]; then
660+
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
661+
for i in "${CACHE[@]}"; do
662+
docker push ${i}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} &
663+
done
664+
wait
665+
fi
666+
'''
667+
}
577668
}
578669
sh '''#! /bin/bash
579670
containers=$(docker ps -aq)
580671
if [[ -n "${containers}" ]]; then
581672
docker stop ${containers}
582673
fi
583-
docker system prune -af --volumes || : '''
674+
docker system prune -af --volumes || :
675+
'''
584676
}
585677
}
586678
}
@@ -651,37 +743,23 @@ pipeline {
651743
environment name: 'EXIT_STATUS', value: ''
652744
}
653745
steps {
654-
withCredentials([
655-
[
656-
$class: 'UsernamePasswordMultiBinding',
657-
credentialsId: 'Quay.io-Robot',
658-
usernameVariable: 'QUAYUSER',
659-
passwordVariable: 'QUAYPASS'
660-
]
661-
]) {
662-
retry_backoff(5,5) {
663-
sh '''#! /bin/bash
664-
set -e
665-
echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
666-
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
667-
echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
668-
echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
669-
for PUSHIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${IMAGE}"; do
670-
docker tag ${IMAGE}:${META_TAG} ${PUSHIMAGE}:${META_TAG}
671-
docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:alpine320
672-
docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${EXT_RELEASE_TAG}
673-
if [ -n "${SEMVER}" ]; then
674-
docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${SEMVER}
675-
fi
676-
docker push ${PUSHIMAGE}:alpine320
677-
docker push ${PUSHIMAGE}:${META_TAG}
678-
docker push ${PUSHIMAGE}:${EXT_RELEASE_TAG}
679-
if [ -n "${SEMVER}" ]; then
680-
docker push ${PUSHIMAGE}:${SEMVER}
681-
fi
746+
retry_backoff(5,5) {
747+
sh '''#! /bin/bash
748+
set -e
749+
for PUSHIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
750+
[[ ${PUSHIMAGE%%/*} =~ \\. ]] && PUSHIMAGEPLUS="${PUSHIMAGE}" || PUSHIMAGEPLUS="docker.io/${PUSHIMAGE}"
751+
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
752+
for i in "${CACHE[@]}"; do
753+
if [[ "${PUSHIMAGEPLUS}" == "$(cut -d "/" -f1 <<< ${i})"* ]]; then
754+
CACHEIMAGE=${i}
755+
fi
682756
done
683-
'''
684-
}
757+
docker buildx imagetools create --prefer-index=false -t ${PUSHIMAGE}:${META_TAG} -t ${PUSHIMAGE}:alpine320 -t ${PUSHIMAGE}:${EXT_RELEASE_TAG} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
758+
if [ -n "${SEMVER}" ]; then
759+
docker buildx imagetools create --prefer-index=false -t ${PUSHIMAGE}:${SEMVER} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
760+
fi
761+
done
762+
'''
685763
}
686764
}
687765
}
@@ -692,57 +770,34 @@ pipeline {
692770
environment name: 'EXIT_STATUS', value: ''
693771
}
694772
steps {
695-
withCredentials([
696-
[
697-
$class: 'UsernamePasswordMultiBinding',
698-
credentialsId: 'Quay.io-Robot',
699-
usernameVariable: 'QUAYUSER',
700-
passwordVariable: 'QUAYPASS'
701-
]
702-
]) {
703-
retry_backoff(5,5) {
704-
sh '''#! /bin/bash
705-
set -e
706-
echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
707-
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
708-
echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
709-
echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
710-
if [ "${CI}" == "false" ]; then
711-
docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} --platform=arm64
712-
docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
713-
fi
714-
for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
715-
docker tag ${IMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG}
716-
docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-alpine320
717-
docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
718-
docker tag ${IMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
719-
docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-alpine320
720-
docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
721-
if [ -n "${SEMVER}" ]; then
722-
docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${SEMVER}
723-
docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
724-
fi
725-
docker push ${MANIFESTIMAGE}:amd64-${META_TAG}
726-
docker push ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
727-
docker push ${MANIFESTIMAGE}:amd64-alpine320
728-
docker push ${MANIFESTIMAGE}:arm64v8-${META_TAG}
729-
docker push ${MANIFESTIMAGE}:arm64v8-alpine320
730-
docker push ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
731-
if [ -n "${SEMVER}" ]; then
732-
docker push ${MANIFESTIMAGE}:amd64-${SEMVER}
733-
docker push ${MANIFESTIMAGE}:arm64v8-${SEMVER}
734-
fi
735-
done
736-
for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
737-
docker buildx imagetools create -t ${MANIFESTIMAGE}:alpine320 ${MANIFESTIMAGE}:amd64-alpine320 ${MANIFESTIMAGE}:arm64v8-alpine320
738-
docker buildx imagetools create -t ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
739-
docker buildx imagetools create -t ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
740-
if [ -n "${SEMVER}" ]; then
741-
docker buildx imagetools create -t ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
742-
fi
773+
retry_backoff(5,5) {
774+
sh '''#! /bin/bash
775+
set -e
776+
for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
777+
[[ ${MANIFESTIMAGE%%/*} =~ \\. ]] && MANIFESTIMAGEPLUS="${MANIFESTIMAGE}" || MANIFESTIMAGEPLUS="docker.io/${MANIFESTIMAGE}"
778+
IFS=',' read -ra CACHE <<< "$BUILDCACHE"
779+
for i in "${CACHE[@]}"; do
780+
if [[ "${MANIFESTIMAGEPLUS}" == "$(cut -d "/" -f1 <<< ${i})"* ]]; then
781+
CACHEIMAGE=${i}
782+
fi
743783
done
744-
'''
745-
}
784+
docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:amd64-${META_TAG} -t ${MANIFESTIMAGE}:amd64-alpine320 -t ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
785+
docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:arm64v8-${META_TAG} -t ${MANIFESTIMAGE}:arm64v8-alpine320 -t ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} ${CACHEIMAGE}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
786+
if [ -n "${SEMVER}" ]; then
787+
docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:amd64-${SEMVER} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
788+
docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:arm64v8-${SEMVER} ${CACHEIMAGE}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
789+
fi
790+
done
791+
for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
792+
docker buildx imagetools create -t ${MANIFESTIMAGE}:alpine320 ${MANIFESTIMAGE}:amd64-alpine320 ${MANIFESTIMAGE}:arm64v8-alpine320
793+
docker buildx imagetools create -t ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
794+
795+
docker buildx imagetools create -t ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
796+
if [ -n "${SEMVER}" ]; then
797+
docker buildx imagetools create -t ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
798+
fi
799+
done
800+
'''
746801
}
747802
}
748803
}
@@ -770,7 +825,7 @@ pipeline {
770825
echo '{"tag_name":"'${META_TAG}'",\
771826
"target_commitish": "alpine320",\
772827
"name": "'${META_TAG}'",\
773-
"body": "**LinuxServer Changes:**\\n\\n'${LS_RELEASE_NOTES}'\\n\\n**Remote Changes:**\\n\\n' > start
828+
"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
774829
printf '","draft": false,"prerelease": false}' >> releasebody.json
775830
paste -d'\\0' start releasebody.json > releasebody.json.done
776831
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

Comments
 (0)