From 6b45c7933560930a49be480bab441fd84c443d46 Mon Sep 17 00:00:00 2001 From: iFargle Date: Tue, 14 Mar 2023 18:25:51 +0900 Subject: [PATCH 01/27] Test --- Jenkinsfile | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 1a93404..17925d8 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -45,23 +45,7 @@ pipeline { } } } - stage('Test') { - options { timeout(time: 3, unit: 'MINUTES') } - steps { - script { - privateImage.inside { - sh 'ls -lah /app' - sh 'python --version' - sh 'pip list' - } - publicImage.inside { - sh 'ls -lah /app' - sh 'python --version' - sh 'pip list' - } - } - } - } + stage('Push') { options { timeout(time: 5, unit: 'MINUTES') } steps { From 09358cc6b331c0832e4b8b21ce5ec1aed9af905b Mon Sep 17 00:00:00 2001 From: iFargle Date: Tue, 14 Mar 2023 18:43:03 +0900 Subject: [PATCH 02/27] Test --- Dockerfile | 3 ++- Jenkinsfile | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index c1a54b9..ffab34b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,7 +10,8 @@ ENV PYTHONUNBUFFERED=1 # Don't create `.pyc` files: ENV PYTHONDONTWRITEBYTECODE=1 -RUN pip install poetry && poetry config virtualenvs.in-project true +RUN pip install poetry +RUN poetry config virtualenvs.in-project true WORKDIR ${WORKDIR} diff --git a/Jenkinsfile b/Jenkinsfile index 17925d8..78e2e6c 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -45,7 +45,6 @@ pipeline { } } } - stage('Push') { options { timeout(time: 5, unit: 'MINUTES') } steps { From 1f9d79980b3f6662d1728d6b18421bd835651ee6 Mon Sep 17 00:00:00 2001 From: iFargle Date: Tue, 14 Mar 2023 19:06:23 +0900 Subject: [PATCH 03/27] Test --- Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Dockerfile b/Dockerfile index ffab34b..bffadc3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,6 +10,7 @@ ENV PYTHONUNBUFFERED=1 # Don't create `.pyc` files: ENV PYTHONDONTWRITEBYTECODE=1 +RUN apk add gcc make RUN pip install poetry RUN poetry config virtualenvs.in-project true From 5911236d69212c4a431e57a76164249c47c9136e Mon Sep 17 00:00:00 2001 From: iFargle Date: Tue, 14 Mar 2023 19:15:15 +0900 Subject: [PATCH 04/27] Test --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index bffadc3..607925c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,7 +10,7 @@ ENV PYTHONUNBUFFERED=1 # Don't create `.pyc` files: ENV PYTHONDONTWRITEBYTECODE=1 -RUN apk add gcc make +RUN apk add gcc make musl-dev RUN pip install poetry RUN poetry config virtualenvs.in-project true From 281914078e9afd7dd39aa9a79c35f044d2b844a8 Mon Sep 17 00:00:00 2001 From: iFargle Date: Tue, 14 Mar 2023 19:32:01 +0900 Subject: [PATCH 05/27] test --- Dockerfile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 607925c..1a6d4d4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,7 +10,9 @@ ENV PYTHONUNBUFFERED=1 # Don't create `.pyc` files: ENV PYTHONDONTWRITEBYTECODE=1 -RUN apk add gcc make musl-dev +# For building CFFI: +RUN apk add gcc make musl-dev libffi-dev + RUN pip install poetry RUN poetry config virtualenvs.in-project true From b5511ede26bf129fa988c32aa4d330211a466475 Mon Sep 17 00:00:00 2001 From: iFargle Date: Tue, 14 Mar 2023 19:59:34 +0900 Subject: [PATCH 06/27] test --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 1a6d4d4..a62d243 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,7 +11,7 @@ ENV PYTHONUNBUFFERED=1 ENV PYTHONDONTWRITEBYTECODE=1 # For building CFFI: -RUN apk add gcc make musl-dev libffi-dev +RUN apk add gcc make musl-dev libffi-dev rust RUN pip install poetry RUN poetry config virtualenvs.in-project true From 5f8f63c2016fde66f21a541698239f9d9c6ee57c Mon Sep 17 00:00:00 2001 From: iFargle Date: Tue, 14 Mar 2023 20:13:36 +0900 Subject: [PATCH 07/27] test --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index a62d243..5bc8be8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,7 +11,7 @@ ENV PYTHONUNBUFFERED=1 ENV PYTHONDONTWRITEBYTECODE=1 # For building CFFI: -RUN apk add gcc make musl-dev libffi-dev rust +RUN apk add gcc make musl-dev libffi-dev rust cargo RUN pip install poetry RUN poetry config virtualenvs.in-project true From 01bae075f2a5381e950997b66fd5cc5de9f7cd6f Mon Sep 17 00:00:00 2001 From: iFargle Date: Tue, 14 Mar 2023 20:52:39 +0900 Subject: [PATCH 08/27] test --- Dockerfile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 5bc8be8..99ce40f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,8 +9,10 @@ ARG WORKDIR ENV PYTHONUNBUFFERED=1 # Don't create `.pyc` files: ENV PYTHONDONTWRITEBYTECODE=1 +# https://github.com/rust-lang/cargo/issues/2808 +ENV CARGO_NET_GIT_FETCH_WITH_CLI=true -# For building CFFI: +# For building CFFI / Crypgotraphy: RUN apk add gcc make musl-dev libffi-dev rust cargo RUN pip install poetry From 648e2b88963f1b3d0ab103f7c237e1c68db53944 Mon Sep 17 00:00:00 2001 From: iFargle Date: Tue, 14 Mar 2023 21:03:58 +0900 Subject: [PATCH 09/27] test --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 99ce40f..cfa40d0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,7 +13,7 @@ ENV PYTHONDONTWRITEBYTECODE=1 ENV CARGO_NET_GIT_FETCH_WITH_CLI=true # For building CFFI / Crypgotraphy: -RUN apk add gcc make musl-dev libffi-dev rust cargo +RUN apk add gcc make musl-dev libffi-dev rust cargo git curl RUN pip install poetry RUN poetry config virtualenvs.in-project true From 9d61b87f96bc8354289dd10fc2a9a87fa1a39584 Mon Sep 17 00:00:00 2001 From: iFargle Date: Tue, 14 Mar 2023 21:04:28 +0900 Subject: [PATCH 10/27] test --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index cfa40d0..e27dda3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,7 +13,7 @@ ENV PYTHONDONTWRITEBYTECODE=1 ENV CARGO_NET_GIT_FETCH_WITH_CLI=true # For building CFFI / Crypgotraphy: -RUN apk add gcc make musl-dev libffi-dev rust cargo git curl +RUN apk add gcc make musl-dev libffi-dev rust cargo git RUN pip install poetry RUN poetry config virtualenvs.in-project true From abc7502fd0763584aaba7c46934573ce98bbfab9 Mon Sep 17 00:00:00 2001 From: iFargle Date: Tue, 14 Mar 2023 22:09:28 +0900 Subject: [PATCH 11/27] test --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index e27dda3..59b04f6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,7 +13,7 @@ ENV PYTHONDONTWRITEBYTECODE=1 ENV CARGO_NET_GIT_FETCH_WITH_CLI=true # For building CFFI / Crypgotraphy: -RUN apk add gcc make musl-dev libffi-dev rust cargo git +RUN apk add gcc make musl-dev libffi-dev rust cargo git openssl-dev RUN pip install poetry RUN poetry config virtualenvs.in-project true From 881481c31385308c37e06e75d341749abfdaee3f Mon Sep 17 00:00:00 2001 From: iFargle Date: Wed, 15 Mar 2023 23:19:26 +0900 Subject: [PATCH 12/27] test builds --- Jenkinsfile | 126 +++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 100 insertions(+), 26 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 78e2e6c..86073cf 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -5,9 +5,19 @@ pipeline { label 'linux-x64' } environment { - APP_VERSION = 'v0.5.3' - HS_VERSION = "v0.20.0" // Version of Headscale this is compatible with - BUILD_DATE = '' + APP_VERSION = 'v0.5.4' + HS_VERSION = "v0.20.0" // Version of Headscale this is compatible with + BUILD_DATE = '' + BUILDER_NAME = "multiarch" + + DOCKERHUB_URL = "https://registry-1.docker.io/" + DOCKERHUB_CRED = credentials('dockerhub-ifargle-pat') + + GHCR_URL = "https://ghcr.io/" + GHCR_CRED = credentials('github-ifargle-pat') + + SYSCTL_URL = "https://git.sysctl.io/" + SYSCTL_CRED = credentials('gitea-jenkins-pat') } options { buildDiscarder(logRotator(numToKeepStr: '100', artifactNumToKeepStr: '20')) @@ -20,28 +30,84 @@ pipeline { script { BUILD_DATE = java.time.LocalDate.now() } } } - stage('Build') { + stage('Registry Logins') { + steps { + sh """ + echo 'Logging into Docker Hub...' + docker login -u $DOCKERHUB_CRED_USR -p $DOCKERHUB_CRED_PSW $DOCKERHUB_URL + echo 'Logging into Github Container Registry... + docker login -u $GHCR_CRED_USR -p $GHCR_CRED_PSW $GHCR_URL + echo 'Logging into git.sysctl.io... + docker login -u $SYSCTL_CRED_USR -p $SYSCTL_CRED_PSW $SYSCTL_URL + """ + } + } + stage('Create Buildx ENV') { + steps { + sh """ + # Create the builder: + docker buildx create --name $BUILDER_NAME + docker buildx user $BUILDER_NAME + docker buildx inspect --bootstrap + + docker buildx ls + """ + } + } + stage('Build Private') { options { timeout(time: 30, unit: 'MINUTES') } steps { script { - privateImage = docker.build("albert/headscale-webui:${env.BRANCH_NAME}-${env.BUILD_ID}", - "--label \"GIT_COMMIT=${env.GIT_COMMIT}\" " - + " --build-arg GIT_COMMIT_ARG=${env.GIT_COMMIT} " - + " --build-arg GIT_BRANCH_ARG=${env.BRANCH_NAME} " - + " --build-arg APP_VERSION_ARG=${APP_VERSION} " - + " --build-arg BUILD_DATE_ARG=${BUILD_DATE} " - + " --build-arg HS_VERSION_ARG=${HS_VERSION} " - + " ." - ) - publicImage = docker.build("ifargle/headscale-webui:${env.BRANCH_NAME}-${env.BUILD_ID}", - "--label \"GIT_COMMIT=${env.GIT_COMMIT}\" " - + " --build-arg GIT_COMMIT_ARG=${env.GIT_COMMIT} " - + " --build-arg GIT_BRANCH_ARG=${env.BRANCH_NAME} " - + " --build-arg APP_VERSION_ARG=${APP_VERSION} " - + " --build-arg BUILD_DATE_ARG=${BUILD_DATE} " - + " --build-arg HS_VERSION_ARG=${HS_VERSION} " - + " ." - ) + if (env.BRANCH_NAME == 'main') { + privateImage = docker.build("albert/headscale-webui:${env.BRANCH_NAME}-${env.BUILD_ID}", + "--label \"GIT_COMMIT=${env.GIT_COMMIT}\" " + + " --build-arg GIT_COMMIT_ARG=${env.GIT_COMMIT} " + + " --build-arg GIT_BRANCH_ARG=${env.BRANCH_NAME} " + + " --build-arg APP_VERSION_ARG=${APP_VERSION} " + + " --build-arg BUILD_DATE_ARG=${BUILD_DATE} " + + " --build-arg HS_VERSION_ARG=${HS_VERSION} " + + " ." + + " --platform linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6" + + " -t ${SYSCTL_URL}/${SYSCTL_USER}/headscale-webui:latest" + + " -t ${SYSCTL_URL}/${SYSCTL_USER}/headscale-webui:${APP_VERSION}" + ) + } else { + privateImage = docker.build("albert/headscale-webui:${env.BRANCH_NAME}-${env.BUILD_ID}", + "--label \"GIT_COMMIT=${env.GIT_COMMIT}\" " + + " --build-arg GIT_COMMIT_ARG=${env.GIT_COMMIT} " + + " --build-arg GIT_BRANCH_ARG=${env.BRANCH_NAME} " + + " --build-arg APP_VERSION_ARG=${APP_VERSION} " + + " --build-arg BUILD_DATE_ARG=${BUILD_DATE} " + + " --build-arg HS_VERSION_ARG=${HS_VERSION} " + + " ." + + " --platform linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6" + + " -t ${SYSCTL_URL}/${SYSCTL_USER}/headscale-webui:testing" + + " -t ${SYSCTL_URL}/${SYSCTL_USER}/headscale-webui:${env.BRANCH_NAME}" + ) + } + } + } + } + stage('Build Public') { + options { timeout(time: 30, unit: 'MINUTES') } + steps { + script { + if (env.BRANCH_NAME == 'main') { + publicImage = docker.build("ifargle/headscale-webui:${env.BRANCH_NAME}-${env.BUILD_ID}", + "--label \"GIT_COMMIT=${env.GIT_COMMIT}\" " + + " --build-arg GIT_COMMIT_ARG=${env.GIT_COMMIT} " + + " --build-arg GIT_BRANCH_ARG=${env.BRANCH_NAME} " + + " --build-arg APP_VERSION_ARG=${APP_VERSION} " + + " --build-arg BUILD_DATE_ARG=${BUILD_DATE} " + + " --build-arg HS_VERSION_ARG=${HS_VERSION} " + + " ." + + " --platform linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6" + + " -t ${GHCR_URL}/${GHCR_USER}/headscale-webui:latest" + + " -t ${GHCR_URL}/${GHCR_USER}/headscale-webui:${APP_VERSION}" + + " -t ${DOCKERHUB_URL}/${DOCKERHUB_USER}/headscale-webui:latest" + + " -t ${DOCKERHUB_URL}/${DOCKERHUB_USER}/headscale-webui:${APP_VERSION}" + ) + } } } } @@ -50,15 +116,15 @@ pipeline { steps { script { if (env.BRANCH_NAME == 'main') { - docker.withRegistry('https://git.sysctl.io/', 'gitea-jenkins-pat') { + docker.withRegistry('', 'gitea-jenkins-pat') { privateImage.push("latest") privateImage.push(APP_VERSION) } - docker.withRegistry('https://ghcr.io/', 'github-ifargle-pat') { + docker.withRegistry('', 'github-ifargle-pat') { publicImage.push("latest") publicImage.push(APP_VERSION) } - docker.withRegistry('https://registry-1.docker.io/', 'dockerhub-ifargle-pat') { + docker.withRegistry('', 'dockerhub-ifargle-pat') { publicImage.push("latest") publicImage.push(APP_VERSION) } @@ -75,7 +141,15 @@ pipeline { options { timeout(time: 3, unit: 'MINUTES') } steps { script { - sh 'docker system prune --force' + sh """ + docker buildx use default + docker buildx rm $BUILDER_NAME + + ## Sanity check step + docker buildx ls + + docker system prune --force + """ } } } From aafe6eae36deee0f4110758076e9f471f2e5b4f2 Mon Sep 17 00:00:00 2001 From: iFargle Date: Wed, 15 Mar 2023 23:25:34 +0900 Subject: [PATCH 13/27] test --- Jenkinsfile | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 86073cf..d5875bb 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -68,8 +68,8 @@ pipeline { + " --build-arg HS_VERSION_ARG=${HS_VERSION} " + " ." + " --platform linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6" - + " -t ${SYSCTL_URL}/${SYSCTL_USER}/headscale-webui:latest" - + " -t ${SYSCTL_URL}/${SYSCTL_USER}/headscale-webui:${APP_VERSION}" + + " -t ${SYSCTL_URL}/${SYSCTL_CRED_USR}/headscale-webui:latest" + + " -t ${SYSCTL_URL}/${SYSCTL_CRED_USR}/headscale-webui:${APP_VERSION}" ) } else { privateImage = docker.build("albert/headscale-webui:${env.BRANCH_NAME}-${env.BUILD_ID}", @@ -81,8 +81,8 @@ pipeline { + " --build-arg HS_VERSION_ARG=${HS_VERSION} " + " ." + " --platform linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6" - + " -t ${SYSCTL_URL}/${SYSCTL_USER}/headscale-webui:testing" - + " -t ${SYSCTL_URL}/${SYSCTL_USER}/headscale-webui:${env.BRANCH_NAME}" + + " -t ${SYSCTL_URL}/${SYSCTL_CRED_USR}/headscale-webui:testing" + + " -t ${SYSCTL_URL}/${SYSCTL_CRED_USR}/headscale-webui:${env.BRANCH_NAME}" ) } } @@ -102,10 +102,10 @@ pipeline { + " --build-arg HS_VERSION_ARG=${HS_VERSION} " + " ." + " --platform linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6" - + " -t ${GHCR_URL}/${GHCR_USER}/headscale-webui:latest" - + " -t ${GHCR_URL}/${GHCR_USER}/headscale-webui:${APP_VERSION}" - + " -t ${DOCKERHUB_URL}/${DOCKERHUB_USER}/headscale-webui:latest" - + " -t ${DOCKERHUB_URL}/${DOCKERHUB_USER}/headscale-webui:${APP_VERSION}" + + " -t ${GHCR_URL}/${GHCR_CRED_USR}/headscale-webui:latest" + + " -t ${GHCR_URL}/${GHCR_CRED_USR}/headscale-webui:${APP_VERSION}" + + " -t ${DOCKERHUB_URL}/${DOCKERHUB_CRED_USR}/headscale-webui:latest" + + " -t ${DOCKERHUB_URL}/${DOCKERHUB_CRED_USR}/headscale-webui:${APP_VERSION}" ) } } From 77310dd60b90ade59dc37b19b1ed951b6e6fd92a Mon Sep 17 00:00:00 2001 From: iFargle Date: Wed, 15 Mar 2023 23:36:50 +0900 Subject: [PATCH 14/27] Test --- Jenkinsfile | 53 +++++++++++------------------------------------------ 1 file changed, 11 insertions(+), 42 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index d5875bb..54f391b 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -32,14 +32,9 @@ pipeline { } stage('Registry Logins') { steps { - sh """ - echo 'Logging into Docker Hub...' - docker login -u $DOCKERHUB_CRED_USR -p $DOCKERHUB_CRED_PSW $DOCKERHUB_URL - echo 'Logging into Github Container Registry... - docker login -u $GHCR_CRED_USR -p $GHCR_CRED_PSW $GHCR_URL - echo 'Logging into git.sysctl.io... - docker login -u $SYSCTL_CRED_USR -p $SYSCTL_CRED_PSW $SYSCTL_URL - """ + sh 'docker login -u %DOCKERHUB_CRED_USR% -p %DOCKERHUB_CRED_PSW% $DOCKERHUB_URL' + sh 'docker login -u %GHCR_CRED_USR% -p %GHCR_CRED_PSW% $GHCR_URL' + sh 'docker login -u %SYSCTL_CRED_USR% -p %SYSCTL_CRED_PSW% $SYSCTL_URL' } } stage('Create Buildx ENV') { @@ -68,8 +63,8 @@ pipeline { + " --build-arg HS_VERSION_ARG=${HS_VERSION} " + " ." + " --platform linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6" - + " -t ${SYSCTL_URL}/${SYSCTL_CRED_USR}/headscale-webui:latest" - + " -t ${SYSCTL_URL}/${SYSCTL_CRED_USR}/headscale-webui:${APP_VERSION}" + + " -t ${SYSCTL_URL}/albert/headscale-webui:latest" + + " -t ${SYSCTL_URL}/albert/headscale-webui:${APP_VERSION}" ) } else { privateImage = docker.build("albert/headscale-webui:${env.BRANCH_NAME}-${env.BUILD_ID}", @@ -81,8 +76,8 @@ pipeline { + " --build-arg HS_VERSION_ARG=${HS_VERSION} " + " ." + " --platform linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6" - + " -t ${SYSCTL_URL}/${SYSCTL_CRED_USR}/headscale-webui:testing" - + " -t ${SYSCTL_URL}/${SYSCTL_CRED_USR}/headscale-webui:${env.BRANCH_NAME}" + + " -t ${SYSCTL_URL}/albert/headscale-webui:testing" + + " -t ${SYSCTL_URL}/albert/headscale-webui:${env.BRANCH_NAME}" ) } } @@ -102,41 +97,15 @@ pipeline { + " --build-arg HS_VERSION_ARG=${HS_VERSION} " + " ." + " --platform linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6" - + " -t ${GHCR_URL}/${GHCR_CRED_USR}/headscale-webui:latest" - + " -t ${GHCR_URL}/${GHCR_CRED_USR}/headscale-webui:${APP_VERSION}" - + " -t ${DOCKERHUB_URL}/${DOCKERHUB_CRED_USR}/headscale-webui:latest" - + " -t ${DOCKERHUB_URL}/${DOCKERHUB_CRED_USR}/headscale-webui:${APP_VERSION}" + + " -t ${GHCR_URL}/ifargle/headscale-webui:latest" + + " -t ${GHCR_URL}/ifargle/headscale-webui:${APP_VERSION}" + + " -t ${DOCKERHUB_URL}/ifargle/headscale-webui:latest" + + " -t ${DOCKERHUB_URL}/ifargle/headscale-webui:${APP_VERSION}" ) } } } } - stage('Push') { - options { timeout(time: 5, unit: 'MINUTES') } - steps { - script { - if (env.BRANCH_NAME == 'main') { - docker.withRegistry('', 'gitea-jenkins-pat') { - privateImage.push("latest") - privateImage.push(APP_VERSION) - } - docker.withRegistry('', 'github-ifargle-pat') { - publicImage.push("latest") - publicImage.push(APP_VERSION) - } - docker.withRegistry('', 'dockerhub-ifargle-pat') { - publicImage.push("latest") - publicImage.push(APP_VERSION) - } - } else { - docker.withRegistry('https://git.sysctl.io/', 'gitea-jenkins-pat') { - privateImage.push("${env.BRANCH_NAME}") - privateImage.push("testing") - } - } - } - } - } stage('Clean') { options { timeout(time: 3, unit: 'MINUTES') } steps { From e4a8ec8ed0ab3ffa56020fc65d24ed4edfeb142e Mon Sep 17 00:00:00 2001 From: iFargle Date: Wed, 15 Mar 2023 23:48:07 +0900 Subject: [PATCH 15/27] test --- Jenkinsfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 54f391b..7adda11 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -32,9 +32,9 @@ pipeline { } stage('Registry Logins') { steps { - sh 'docker login -u %DOCKERHUB_CRED_USR% -p %DOCKERHUB_CRED_PSW% $DOCKERHUB_URL' - sh 'docker login -u %GHCR_CRED_USR% -p %GHCR_CRED_PSW% $GHCR_URL' - sh 'docker login -u %SYSCTL_CRED_USR% -p %SYSCTL_CRED_PSW% $SYSCTL_URL' + sh 'docker login -u ${DOCKERHUB_CRED_USR} -p ${DOCKERHUB_CRED_PSW} $DOCKERHUB_URL' + sh 'docker login -u ${GHCR_CRED_USR} -p ${GHCR_CRED_PSW} $GHCR_URL' + sh 'docker login -u ${SYSCTL_CRED_USR} -p ${SYSCTL_CRED_PSW} $SYSCTL_URL' } } stage('Create Buildx ENV') { From 909b33000956b02ad2fadb7dcd534239290d184e Mon Sep 17 00:00:00 2001 From: iFargle Date: Thu, 16 Mar 2023 00:10:23 +0900 Subject: [PATCH 16/27] test --- Jenkinsfile | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 7adda11..9ce0dd8 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -14,7 +14,7 @@ pipeline { DOCKERHUB_CRED = credentials('dockerhub-ifargle-pat') GHCR_URL = "https://ghcr.io/" - GHCR_CRED = credentials('github-ifargle-pat') + GHCR_CRED =https://stackoverflow.com/questions/37463489/how-do-i-assure-that-a-jenkins-pipeline-stage-is-always-executed-even-if-a-prev credentials('github-ifargle-pat') SYSCTL_URL = "https://git.sysctl.io/" SYSCTL_CRED = credentials('gitea-jenkins-pat') @@ -106,20 +106,20 @@ pipeline { } } } - stage('Clean') { - options { timeout(time: 3, unit: 'MINUTES') } - steps { - script { - sh """ - docker buildx use default - docker buildx rm $BUILDER_NAME + } + post { + always { + script { + sh """ + docker buildx use default + docker buildx rm $BUILDER_NAME - ## Sanity check step - docker buildx ls + ## Sanity check step + docker buildx ls + docker logout - docker system prune --force - """ - } + docker system prune --force + """ } } } From 3c11f134fd26a104739d8227070fa5bcafd01ab2 Mon Sep 17 00:00:00 2001 From: iFargle Date: Thu, 16 Mar 2023 00:11:45 +0900 Subject: [PATCH 17/27] typo --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 9ce0dd8..981283b 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -14,7 +14,7 @@ pipeline { DOCKERHUB_CRED = credentials('dockerhub-ifargle-pat') GHCR_URL = "https://ghcr.io/" - GHCR_CRED =https://stackoverflow.com/questions/37463489/how-do-i-assure-that-a-jenkins-pipeline-stage-is-always-executed-even-if-a-prev credentials('github-ifargle-pat') + GHCR_CRED = credentials('github-ifargle-pat') SYSCTL_URL = "https://git.sysctl.io/" SYSCTL_CRED = credentials('gitea-jenkins-pat') From 78954e7b86ca87bf66a3fc27a9cf1a1f577c4bd1 Mon Sep 17 00:00:00 2001 From: iFargle Date: Thu, 16 Mar 2023 08:04:01 +0900 Subject: [PATCH 18/27] Test --- Jenkinsfile | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 981283b..b8442e8 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -63,8 +63,8 @@ pipeline { + " --build-arg HS_VERSION_ARG=${HS_VERSION} " + " ." + " --platform linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6" - + " -t ${SYSCTL_URL}/albert/headscale-webui:latest" - + " -t ${SYSCTL_URL}/albert/headscale-webui:${APP_VERSION}" + + " -t albert/headscale-webui:latest" + + " -t albert/headscale-webui:${APP_VERSION}" ) } else { privateImage = docker.build("albert/headscale-webui:${env.BRANCH_NAME}-${env.BUILD_ID}", @@ -76,8 +76,9 @@ pipeline { + " --build-arg HS_VERSION_ARG=${HS_VERSION} " + " ." + " --platform linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6" - + " -t ${SYSCTL_URL}/albert/headscale-webui:testing" - + " -t ${SYSCTL_URL}/albert/headscale-webui:${env.BRANCH_NAME}" + + " -t git.sysctl.io/albert/headscale-webui:testing" + + " -t git.sysctl.io/albert/headscale-webui:${env.BRANCH_NAME}" + + " --push" ) } } @@ -97,10 +98,11 @@ pipeline { + " --build-arg HS_VERSION_ARG=${HS_VERSION} " + " ." + " --platform linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6" - + " -t ${GHCR_URL}/ifargle/headscale-webui:latest" - + " -t ${GHCR_URL}/ifargle/headscale-webui:${APP_VERSION}" - + " -t ${DOCKERHUB_URL}/ifargle/headscale-webui:latest" - + " -t ${DOCKERHUB_URL}/ifargle/headscale-webui:${APP_VERSION}" + + " -t docker.io/ifargle/headscale-webui:latest" + + " -t docker.io/ifargle/headscale-webui:${APP_VERSION}" + + " -t ghcr.io/ifargle/headscale-webui:latest" + + " -t ghcr.io/ifargle/headscale-webui:${APP_VERSION}" + + " --push" ) } } From 030a8ca29c4e4c44c1e8e0137a0a096b3228703f Mon Sep 17 00:00:00 2001 From: iFargle Date: Thu, 16 Mar 2023 08:05:10 +0900 Subject: [PATCH 19/27] Typo --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index b8442e8..334bfbf 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -42,7 +42,7 @@ pipeline { sh """ # Create the builder: docker buildx create --name $BUILDER_NAME - docker buildx user $BUILDER_NAME + docker buildx use $BUILDER_NAME docker buildx inspect --bootstrap docker buildx ls From a94a4ccfe518a9654a5970ccb817a9398cc6e36c Mon Sep 17 00:00:00 2001 From: iFargle Date: Thu, 16 Mar 2023 08:24:19 +0900 Subject: [PATCH 20/27] For log level DEBUG, do futures in a for loop instead of threaded --- renderer.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/renderer.py b/renderer.py index 6369c8b..b825b94 100644 --- a/renderer.py +++ b/renderer.py @@ -406,14 +406,15 @@ def render_machines_cards(): app.logger.debug("Appending iterable: "+str(i)) iterable.append(i) # Flask-Executor Method: - app.logger.info("Starting futures") - futures = [executor.submit(thread_machine_content, machines_list["machines"][idx], machine_content, idx) for idx in iterable] - # Wait for the executor to finish all jobs: - wait(futures, return_when=ALL_COMPLETED) - app.logger.info("Finished futures") - - # DEBUG: Do in a forloop: - # for idx in iterable: thread_machine_content(machines_list["machines"][idx], machine_content, idx) + if LOG_LEVEL == "DEBUG": + # DEBUG: Do in a forloop: + for idx in iterable: thread_machine_content(machines_list["machines"][idx], machine_content, idx) + else: + app.logger.info("Starting futures") + futures = [executor.submit(thread_machine_content, machines_list["machines"][idx], machine_content, idx) for idx in iterable] + # Wait for the executor to finish all jobs: + wait(futures, return_when=ALL_COMPLETED) + app.logger.info("Finished futures") # Sort the content by machine_id: sorted_machines = {key: val for key, val in sorted(machine_content.items(), key = lambda ele: ele[0])} From 5a1bcdcd3cd41bb4e04960a3efece5c50d7b783b Mon Sep 17 00:00:00 2001 From: iFargle Date: Thu, 16 Mar 2023 08:25:21 +0900 Subject: [PATCH 21/27] Update Jenkins build time limits --- Jenkinsfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 334bfbf..c8157d5 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -50,7 +50,7 @@ pipeline { } } stage('Build Private') { - options { timeout(time: 30, unit: 'MINUTES') } + options { timeout(time: 2, unit: 'HOURS') } steps { script { if (env.BRANCH_NAME == 'main') { @@ -85,7 +85,7 @@ pipeline { } } stage('Build Public') { - options { timeout(time: 30, unit: 'MINUTES') } + options { timeout(time: 2, unit: 'HOURS') } steps { script { if (env.BRANCH_NAME == 'main') { From 6e065a60e6c392f28ae4a5530e79265a116faa08 Mon Sep 17 00:00:00 2001 From: iFargle Date: Thu, 16 Mar 2023 10:14:22 +0900 Subject: [PATCH 22/27] Update PAT's --- Jenkinsfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index c8157d5..4700e4b 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -17,7 +17,7 @@ pipeline { GHCR_CRED = credentials('github-ifargle-pat') SYSCTL_URL = "https://git.sysctl.io/" - SYSCTL_CRED = credentials('gitea-jenkins-pat') + SYSCTL_CRED = credentials('forgejo-jenkins-pat') } options { buildDiscarder(logRotator(numToKeepStr: '100', artifactNumToKeepStr: '20')) @@ -63,8 +63,8 @@ pipeline { + " --build-arg HS_VERSION_ARG=${HS_VERSION} " + " ." + " --platform linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6" - + " -t albert/headscale-webui:latest" - + " -t albert/headscale-webui:${APP_VERSION}" + + " -t git.sysctl.io/albert/headscale-webui:latest" + + " -t git.sysctl.io/albert/headscale-webui:${APP_VERSION}" ) } else { privateImage = docker.build("albert/headscale-webui:${env.BRANCH_NAME}-${env.BUILD_ID}", From 6aef9f177dff10855e4c7e582efbaab6906a8688 Mon Sep 17 00:00:00 2001 From: iFargle Date: Thu, 16 Mar 2023 10:28:59 +0900 Subject: [PATCH 23/27] Don't build multiarch for testing --- Jenkinsfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 4700e4b..5efcbf3 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -66,7 +66,7 @@ pipeline { + " -t git.sysctl.io/albert/headscale-webui:latest" + " -t git.sysctl.io/albert/headscale-webui:${APP_VERSION}" ) - } else { + } else { // IF I'm just testing, I don't need to build for ARM privateImage = docker.build("albert/headscale-webui:${env.BRANCH_NAME}-${env.BUILD_ID}", "--label \"GIT_COMMIT=${env.GIT_COMMIT}\" " + " --build-arg GIT_COMMIT_ARG=${env.GIT_COMMIT} " @@ -75,7 +75,7 @@ pipeline { + " --build-arg BUILD_DATE_ARG=${BUILD_DATE} " + " --build-arg HS_VERSION_ARG=${HS_VERSION} " + " ." - + " --platform linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6" + + " --platform linux/amd64" + " -t git.sysctl.io/albert/headscale-webui:testing" + " -t git.sysctl.io/albert/headscale-webui:${env.BRANCH_NAME}" + " --push" From 4d335436593a45af8a7da51d1754a91baf48896a Mon Sep 17 00:00:00 2001 From: iFargle Date: Thu, 16 Mar 2023 10:37:59 +0900 Subject: [PATCH 24/27] test --- Jenkinsfile | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 5efcbf3..d88eae8 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -54,7 +54,7 @@ pipeline { steps { script { if (env.BRANCH_NAME == 'main') { - privateImage = docker.build("albert/headscale-webui:${env.BRANCH_NAME}-${env.BUILD_ID}", + privateImage = docker.build("git.sysctl.io/albert/headscale-webui:${env.BRANCH_NAME}-${env.BUILD_ID}", "--label \"GIT_COMMIT=${env.GIT_COMMIT}\" " + " --build-arg GIT_COMMIT_ARG=${env.GIT_COMMIT} " + " --build-arg GIT_BRANCH_ARG=${env.BRANCH_NAME} " @@ -63,11 +63,11 @@ pipeline { + " --build-arg HS_VERSION_ARG=${HS_VERSION} " + " ." + " --platform linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6" - + " -t git.sysctl.io/albert/headscale-webui:latest" - + " -t git.sysctl.io/albert/headscale-webui:${APP_VERSION}" + + " -t latest" + + " -t ${APP_VERSION}" ) } else { // IF I'm just testing, I don't need to build for ARM - privateImage = docker.build("albert/headscale-webui:${env.BRANCH_NAME}-${env.BUILD_ID}", + privateImage = docker.build("git.sysctl.io/albert/headscale-webui:${env.BRANCH_NAME}-${env.BUILD_ID}", "--label \"GIT_COMMIT=${env.GIT_COMMIT}\" " + " --build-arg GIT_COMMIT_ARG=${env.GIT_COMMIT} " + " --build-arg GIT_BRANCH_ARG=${env.BRANCH_NAME} " @@ -76,8 +76,8 @@ pipeline { + " --build-arg HS_VERSION_ARG=${HS_VERSION} " + " ." + " --platform linux/amd64" - + " -t git.sysctl.io/albert/headscale-webui:testing" - + " -t git.sysctl.io/albert/headscale-webui:${env.BRANCH_NAME}" + + " -t testing" + + " -t ${env.BRANCH_NAME}" + " --push" ) } From 59fd5b2cffd3d939cc6b1bdbde85435527f47e9a Mon Sep 17 00:00:00 2001 From: iFargle Date: Thu, 16 Mar 2023 11:05:32 +0900 Subject: [PATCH 25/27] Try another pat --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index d88eae8..c052bb3 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -17,7 +17,7 @@ pipeline { GHCR_CRED = credentials('github-ifargle-pat') SYSCTL_URL = "https://git.sysctl.io/" - SYSCTL_CRED = credentials('forgejo-jenkins-pat') + SYSCTL_CRED = credentials('gitea-jenkins-pat') } options { buildDiscarder(logRotator(numToKeepStr: '100', artifactNumToKeepStr: '20')) From f5867ee09debcefa18bec852f6124c4b4ede15bf Mon Sep 17 00:00:00 2001 From: iFargle Date: Thu, 16 Mar 2023 11:48:37 +0900 Subject: [PATCH 26/27] Test --- Jenkinsfile | 100 +++++++++++++++++++++++++--------------------------- 1 file changed, 48 insertions(+), 52 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index c052bb3..5943e08 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,5 +1,3 @@ -def privateImage // My personal git / container registry -def publicImage // GitHub Container Registry and Docker Hub pipeline { agent { label 'linux-x64' @@ -24,20 +22,13 @@ pipeline { timestamps() } stages { - stage ('ENV') { + stage ('Jenkins ENV') { steps { sh 'printenv' script { BUILD_DATE = java.time.LocalDate.now() } } } - stage('Registry Logins') { - steps { - sh 'docker login -u ${DOCKERHUB_CRED_USR} -p ${DOCKERHUB_CRED_PSW} $DOCKERHUB_URL' - sh 'docker login -u ${GHCR_CRED_USR} -p ${GHCR_CRED_PSW} $GHCR_URL' - sh 'docker login -u ${SYSCTL_CRED_USR} -p ${SYSCTL_CRED_PSW} $SYSCTL_URL' - } - } - stage('Create Buildx ENV') { + stage('Create Build ENV') { steps { sh """ # Create the builder: @@ -47,39 +38,44 @@ pipeline { docker buildx ls """ + + sh 'docker login -u ${DOCKERHUB_CRED_USR} -p ${DOCKERHUB_CRED_PSW} $DOCKERHUB_URL' + sh 'docker login -u ${GHCR_CRED_USR} -p ${GHCR_CRED_PSW} $GHCR_URL' + sh 'docker login -u ${SYSCTL_CRED_USR} -p ${SYSCTL_CRED_PSW} $SYSCTL_URL' } } - stage('Build Private') { + stage('Build') { options { timeout(time: 2, unit: 'HOURS') } steps { script { if (env.BRANCH_NAME == 'main') { - privateImage = docker.build("git.sysctl.io/albert/headscale-webui:${env.BRANCH_NAME}-${env.BUILD_ID}", - "--label \"GIT_COMMIT=${env.GIT_COMMIT}\" " - + " --build-arg GIT_COMMIT_ARG=${env.GIT_COMMIT} " - + " --build-arg GIT_BRANCH_ARG=${env.BRANCH_NAME} " - + " --build-arg APP_VERSION_ARG=${APP_VERSION} " - + " --build-arg BUILD_DATE_ARG=${BUILD_DATE} " - + " --build-arg HS_VERSION_ARG=${HS_VERSION} " - + " ." - + " --platform linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6" - + " -t latest" - + " -t ${APP_VERSION}" - ) + sh """ + docker build . \ + -t git.sysctl.io/albert/headscale-webui:latest" \ + -t git.sysctl.io/albert/headscale-webui:${APP_VERSION}" \ + --build-arg GIT_COMMIT_ARG=${env.GIT_COMMIT} \ + --build-arg GIT_BRANCH_ARG=${env.BRANCH_NAME} \ + --build-arg APP_VERSION_ARG=${APP_VERSION} \ + --build-arg BUILD_DATE_ARG=${BUILD_DATE} \ + --build-arg HS_VERSION_ARG=${HS_VERSION} \ + --label \"GIT_COMMIT=${env.GIT_COMMIT}\" \ + --platform inux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6 \ + --push" + """ } else { // IF I'm just testing, I don't need to build for ARM - privateImage = docker.build("git.sysctl.io/albert/headscale-webui:${env.BRANCH_NAME}-${env.BUILD_ID}", - "--label \"GIT_COMMIT=${env.GIT_COMMIT}\" " - + " --build-arg GIT_COMMIT_ARG=${env.GIT_COMMIT} " - + " --build-arg GIT_BRANCH_ARG=${env.BRANCH_NAME} " - + " --build-arg APP_VERSION_ARG=${APP_VERSION} " - + " --build-arg BUILD_DATE_ARG=${BUILD_DATE} " - + " --build-arg HS_VERSION_ARG=${HS_VERSION} " - + " ." - + " --platform linux/amd64" - + " -t testing" - + " -t ${env.BRANCH_NAME}" - + " --push" - ) + sh """ + docker build . \ + -t git.sysctl.io/albert/headscale-webui:testing" \ + -t git.sysctl.io/albert/headscale-webui:${env.BRANCH_NAME}" \ + --build-arg GIT_COMMIT_ARG=${env.GIT_COMMIT} \ + --build-arg GIT_BRANCH_ARG=${env.BRANCH_NAME} \ + --build-arg APP_VERSION_ARG=${APP_VERSION} \ + --build-arg BUILD_DATE_ARG=${BUILD_DATE} \ + --build-arg HS_VERSION_ARG=${HS_VERSION} \ + --label \"GIT_COMMIT=${env.GIT_COMMIT}\" \ + --platform linux/amd64 \ + --push" + """ } } } @@ -89,21 +85,21 @@ pipeline { steps { script { if (env.BRANCH_NAME == 'main') { - publicImage = docker.build("ifargle/headscale-webui:${env.BRANCH_NAME}-${env.BUILD_ID}", - "--label \"GIT_COMMIT=${env.GIT_COMMIT}\" " - + " --build-arg GIT_COMMIT_ARG=${env.GIT_COMMIT} " - + " --build-arg GIT_BRANCH_ARG=${env.BRANCH_NAME} " - + " --build-arg APP_VERSION_ARG=${APP_VERSION} " - + " --build-arg BUILD_DATE_ARG=${BUILD_DATE} " - + " --build-arg HS_VERSION_ARG=${HS_VERSION} " - + " ." - + " --platform linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6" - + " -t docker.io/ifargle/headscale-webui:latest" - + " -t docker.io/ifargle/headscale-webui:${APP_VERSION}" - + " -t ghcr.io/ifargle/headscale-webui:latest" - + " -t ghcr.io/ifargle/headscale-webui:${APP_VERSION}" - + " --push" - ) + sh """ + docker build . \ + -t docker.io/ifargle/headscale-webui:latest \ + -t docker.io/ifargle/headscale-webui:${APP_VERSION} \ + -t ghcr.io/ifargle/headscale-webui:latest \ + -t ghcr.io/ifargle/headscale-webui:${APP_VERSION} \ + --build-arg GIT_COMMIT_ARG=${env.GIT_COMMIT} \ + --build-arg GIT_BRANCH_ARG=${env.BRANCH_NAME} \ + --build-arg APP_VERSION_ARG=${APP_VERSION} \ + --build-arg BUILD_DATE_ARG=${BUILD_DATE} \ + --build-arg HS_VERSION_ARG=${HS_VERSION} \ + --label \"GIT_COMMIT=${env.GIT_COMMIT}\" \ + --platform linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6 \ + --push" + """ } } } From e014bac084c124c3a9fcd8276180d116830b46d4 Mon Sep 17 00:00:00 2001 From: iFargle Date: Thu, 16 Mar 2023 11:51:21 +0900 Subject: [PATCH 27/27] Typos --- Jenkinsfile | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 5943e08..53ebb8e 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -51,22 +51,22 @@ pipeline { if (env.BRANCH_NAME == 'main') { sh """ docker build . \ - -t git.sysctl.io/albert/headscale-webui:latest" \ - -t git.sysctl.io/albert/headscale-webui:${APP_VERSION}" \ + -t git.sysctl.io/albert/headscale-webui:latest \ + -t git.sysctl.io/albert/headscale-webui:${APP_VERSION} \ --build-arg GIT_COMMIT_ARG=${env.GIT_COMMIT} \ --build-arg GIT_BRANCH_ARG=${env.BRANCH_NAME} \ --build-arg APP_VERSION_ARG=${APP_VERSION} \ --build-arg BUILD_DATE_ARG=${BUILD_DATE} \ --build-arg HS_VERSION_ARG=${HS_VERSION} \ --label \"GIT_COMMIT=${env.GIT_COMMIT}\" \ - --platform inux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6 \ - --push" + --platform linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6 \ + --push """ } else { // IF I'm just testing, I don't need to build for ARM sh """ docker build . \ - -t git.sysctl.io/albert/headscale-webui:testing" \ - -t git.sysctl.io/albert/headscale-webui:${env.BRANCH_NAME}" \ + -t git.sysctl.io/albert/headscale-webui:testing \ + -t git.sysctl.io/albert/headscale-webui:${env.BRANCH_NAME} \ --build-arg GIT_COMMIT_ARG=${env.GIT_COMMIT} \ --build-arg GIT_BRANCH_ARG=${env.BRANCH_NAME} \ --build-arg APP_VERSION_ARG=${APP_VERSION} \ @@ -74,7 +74,7 @@ pipeline { --build-arg HS_VERSION_ARG=${HS_VERSION} \ --label \"GIT_COMMIT=${env.GIT_COMMIT}\" \ --platform linux/amd64 \ - --push" + --push """ } } @@ -98,7 +98,7 @@ pipeline { --build-arg HS_VERSION_ARG=${HS_VERSION} \ --label \"GIT_COMMIT=${env.GIT_COMMIT}\" \ --platform linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6 \ - --push" + --push """ } }