@@ -8,7 +8,7 @@ pipeline {
8
8
}
9
9
// Input to determine if this is a package check
10
10
parameters {
11
- string(defaultValue : ' false' , description : ' package check run' , name : ' PACKAGE_CHECK' )
11
+ string(defaultValue : ' false' , description : ' package check run' , name : ' PACKAGE_CHECK' )
12
12
}
13
13
// Configuration for the variables used for this specific repo
14
14
environment {
@@ -189,6 +189,7 @@ pipeline {
189
189
env. VERSION_TAG = env. EXT_RELEASE_CLEAN + ' -ls' + env. LS_TAG_NUMBER
190
190
env. META_TAG = env. EXT_RELEASE_CLEAN + ' -ls' + env. LS_TAG_NUMBER
191
191
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'
192
193
}
193
194
}
194
195
}
@@ -213,6 +214,7 @@ pipeline {
213
214
env. META_TAG = env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -dev-' + env. COMMIT_SHA
214
215
env. EXT_RELEASE_TAG = ' version-' + env. EXT_RELEASE_CLEAN
215
216
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'
216
218
}
217
219
}
218
220
}
@@ -237,6 +239,7 @@ pipeline {
237
239
env. EXT_RELEASE_TAG = ' version-' + env. EXT_RELEASE_CLEAN
238
240
env. CODE_URL = ' https://github.com/' + env. LS_USER + ' /' + env. LS_REPO + ' /pull/' + env. PULL_REQUEST
239
241
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'
240
243
}
241
244
}
242
245
}
@@ -256,7 +259,7 @@ pipeline {
256
259
--label \" org.opencontainers.image.ref.name=${ COMMIT_SHA} \" \
257
260
--label \" org.opencontainers.image.title=Jenkins-builder\" \
258
261
--label \" org.opencontainers.image.description=jenkins-builder image by linuxserver.io\" \
259
- --provenance=false --sbom=false \
262
+ --provenance=false --sbom=false --builder=default \
260
263
--no-cache --pull -t jenkinslocal:${ COMMIT_SHA} -${ BUILD_NUMBER} --platform=linux/amd64 ."
261
264
}
262
265
}
@@ -526,8 +529,40 @@ pipeline {
526
529
--label \" org.opencontainers.image.title=Jenkins-builder\" \
527
530
--label \" org.opencontainers.image.description=jenkins-builder image by linuxserver.io\" \
528
531
--no-cache --pull -t ${ IMAGE} :${ META_TAG} --platform=linux/amd64 \
529
- --provenance=false --sbom=false \
532
+ --provenance=false --sbom=false --builder=container --load \
530
533
--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
+ }
531
566
}
532
567
}
533
568
// Build MultiArch Docker containers for push to LS Repo
@@ -558,8 +593,40 @@ pipeline {
558
593
--label \" org.opencontainers.image.title=Jenkins-builder\" \
559
594
--label \" org.opencontainers.image.description=jenkins-builder image by linuxserver.io\" \
560
595
--no-cache --pull -t ${ IMAGE} :amd64-${ META_TAG} --platform=linux/amd64 \
561
- --provenance=false --sbom=false \
596
+ --provenance=false --sbom=false --builder=container --load \
562
597
--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
+ }
563
630
}
564
631
}
565
632
stage(' Build ARM64' ) {
@@ -568,10 +635,6 @@ pipeline {
568
635
}
569
636
steps {
570
637
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
- '''
575
638
sh " sed -r -i 's|(^FROM .*)|\\ 1\\ n\\ nENV LSIO_FIRST_PARTY=true|g' Dockerfile.aarch64"
576
639
sh " docker buildx build \
577
640
--label \" org.opencontainers.image.created=${ GITHUB_DATE} \" \
@@ -587,18 +650,47 @@ pipeline {
587
650
--label \" org.opencontainers.image.title=Jenkins-builder\" \
588
651
--label \" org.opencontainers.image.description=jenkins-builder image by linuxserver.io\" \
589
652
--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 \
591
654
--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
+ }
595
686
}
596
687
sh ''' #! /bin/bash
597
688
containers=$(docker ps -aq)
598
689
if [[ -n "${containers}" ]]; then
599
690
docker stop ${containers}
600
691
fi
601
- docker system prune -af --volumes || : '''
692
+ docker system prune -af --volumes || :
693
+ '''
602
694
}
603
695
}
604
696
}
@@ -748,37 +840,23 @@ pipeline {
748
840
environment name : ' EXIT_STATUS' , value : ' '
749
841
}
750
842
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
779
853
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
+ '''
782
860
}
783
861
}
784
862
}
@@ -789,57 +867,34 @@ pipeline {
789
867
environment name : ' EXIT_STATUS' , value : ' '
790
868
}
791
869
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
840
880
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
+ '''
843
898
}
844
899
}
845
900
}
0 commit comments