From bda4e04fee611c3f8f5e46343e47169b055fc9b9 Mon Sep 17 00:00:00 2001 From: Daniel_I_Am Date: Fri, 3 Sep 2021 20:38:42 +0000 Subject: [PATCH 01/15] Create a Gitlab CI procedure --- .gitlab-ci.yml | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 .gitlab-ci.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..4fe8113 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,40 @@ +stages: + - build + - publish + - deploy + +build-job: + stage: build + image: docker:stable + tags: + - docker + script: + - docker login --username="$REGISTRY_USER" --password="REGISTRY_PASSWORD" "$REGISTRY_BASE_URL" + - docker -H unix:///var/run/docker.sock image build -t "$REGISTRY_BASE_URL/$DOCKER_IMAGE_NAME:$CI_COMMIT_SHORT_SHA" ./ + artifacts: + - paths: + - ~/.docker/ + +publish-job: + stage: publish + image: docker:stable + tags: + - docker + script: + - docker -H unix:///var/run/docker.sock image push "$REGISTRY_BASE_URL/$DOCKER_IMAGE_NAME:$CI_COMMIT_SHORT_SHA" + +deploy-job: + stage: deploy + when: manual + image: google/cloud-sdk + script: + - export KUBECONFIG="$KUBE_AUTH" + - cp "$ENV_PRODUCTION" "./build/.env.production" + - cp "$MYSQL_ENV" "./build/mysql-secret.env" + - cp "~/.docker/config.json" "./build/.dockerconfigjson" + - cd "./build" + - kubectl apply -k ./ + - echo "Waiting for deployment..." + - sleep 30 + - WEBSITE_POD=$(kubectl get pod -l "$KUBE_POD_LABELS" -n "$KUBE_NAMESPACE" -o jsonpath="{.items[0].metadata.name}") + - kubectl delete -n "$KUBE_NAMESPACE" pod "$WEBSITE_POD" From fd795a733db4b6e8d644a926f1be47caa9016368 Mon Sep 17 00:00:00 2001 From: Daniel_I_Am Date: Fri, 3 Sep 2021 20:39:14 +0000 Subject: [PATCH 02/15] Update .gitlab-ci.yml From 05d507d1755f299665a81f7b1c8cee93fc22344e Mon Sep 17 00:00:00 2001 From: Daniel_I_Am Date: Fri, 3 Sep 2021 20:40:45 +0000 Subject: [PATCH 03/15] Fix artifacts yaml error --- .gitlab-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 4fe8113..73128f8 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -12,8 +12,8 @@ build-job: - docker login --username="$REGISTRY_USER" --password="REGISTRY_PASSWORD" "$REGISTRY_BASE_URL" - docker -H unix:///var/run/docker.sock image build -t "$REGISTRY_BASE_URL/$DOCKER_IMAGE_NAME:$CI_COMMIT_SHORT_SHA" ./ artifacts: - - paths: - - ~/.docker/ + paths: + - ~/.docker/ publish-job: stage: publish From 43d32c510548a7304d742e65b7f751ea5c299c12 Mon Sep 17 00:00:00 2001 From: Daniel_I_Am Date: Fri, 3 Sep 2021 20:41:53 +0000 Subject: [PATCH 04/15] Fix docker login syntax --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 73128f8..1998e57 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -9,7 +9,7 @@ build-job: tags: - docker script: - - docker login --username="$REGISTRY_USER" --password="REGISTRY_PASSWORD" "$REGISTRY_BASE_URL" + - docker login --username "$REGISTRY_USER" --password "REGISTRY_PASSWORD" "$REGISTRY_BASE_URL" - docker -H unix:///var/run/docker.sock image build -t "$REGISTRY_BASE_URL/$DOCKER_IMAGE_NAME:$CI_COMMIT_SHORT_SHA" ./ artifacts: paths: From e312581b1bba4f91603b456f3298b51590be26d4 Mon Sep 17 00:00:00 2001 From: Daniel_I_Am Date: Fri, 3 Sep 2021 20:45:37 +0000 Subject: [PATCH 05/15] Fix docker login password not being a variable --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1998e57..2753113 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -9,7 +9,7 @@ build-job: tags: - docker script: - - docker login --username "$REGISTRY_USER" --password "REGISTRY_PASSWORD" "$REGISTRY_BASE_URL" + - docker login --username "$REGISTRY_USER" --password "$REGISTRY_PASSWORD" "$REGISTRY_BASE_URL" - docker -H unix:///var/run/docker.sock image build -t "$REGISTRY_BASE_URL/$DOCKER_IMAGE_NAME:$CI_COMMIT_SHORT_SHA" ./ artifacts: paths: From 8ee09be3d0b468e08a0f124b96533ce228cf44fe Mon Sep 17 00:00:00 2001 From: Daniel_I_Am Date: Fri, 3 Sep 2021 20:54:01 +0000 Subject: [PATCH 06/15] Persist docker-login artifact throughout pipeline process --- .gitlab-ci.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2753113..63e21d8 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -18,6 +18,8 @@ build-job: publish-job: stage: publish image: docker:stable + dependencies: + - build-job tags: - docker script: @@ -27,6 +29,8 @@ deploy-job: stage: deploy when: manual image: google/cloud-sdk + dependencies: + - build-job script: - export KUBECONFIG="$KUBE_AUTH" - cp "$ENV_PRODUCTION" "./build/.env.production" From 4b86de69dafc051ca801fa3241aa86dda78c7633 Mon Sep 17 00:00:00 2001 From: Daniel_I_Am Date: Fri, 3 Sep 2021 21:03:02 +0000 Subject: [PATCH 07/15] Refactor out authentication job from build job --- .gitlab-ci.yml | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 63e21d8..2568100 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,25 +1,31 @@ stages: + - auth - build - publish - deploy +auth-job: + stage: auth + image: docker:stable + script: + - docker login --username "$REGISTRY_USER" --password "$REGISTRY_PASSWORD" "$REGISTRY_BASE_URL" + artifacts: + paths: + - ~/.docker/ + build-job: stage: build image: docker:stable tags: - docker script: - - docker login --username "$REGISTRY_USER" --password "$REGISTRY_PASSWORD" "$REGISTRY_BASE_URL" - docker -H unix:///var/run/docker.sock image build -t "$REGISTRY_BASE_URL/$DOCKER_IMAGE_NAME:$CI_COMMIT_SHORT_SHA" ./ - artifacts: - paths: - - ~/.docker/ publish-job: stage: publish image: docker:stable dependencies: - - build-job + - auth-job tags: - docker script: @@ -30,7 +36,7 @@ deploy-job: when: manual image: google/cloud-sdk dependencies: - - build-job + - auth-job script: - export KUBECONFIG="$KUBE_AUTH" - cp "$ENV_PRODUCTION" "./build/.env.production" From 5d31f3e32edd7b1e42ef3bbf8830ad60a41ffc54 Mon Sep 17 00:00:00 2001 From: Daniel_I_Am Date: Fri, 3 Sep 2021 21:11:04 +0000 Subject: [PATCH 08/15] Artifact is not being detected, attempt a fix --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2568100..b7e878c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -11,7 +11,7 @@ auth-job: - docker login --username "$REGISTRY_USER" --password "$REGISTRY_PASSWORD" "$REGISTRY_BASE_URL" artifacts: paths: - - ~/.docker/ + - "~/.docker/" build-job: stage: build From 368042558628678c27db938f86f1aeae1bcaa530 Mon Sep 17 00:00:00 2001 From: Daniel_I_Am Date: Fri, 3 Sep 2021 21:12:09 +0000 Subject: [PATCH 09/15] Hard-code absolute artifact path --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b7e878c..fddf001 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -11,7 +11,7 @@ auth-job: - docker login --username "$REGISTRY_USER" --password "$REGISTRY_PASSWORD" "$REGISTRY_BASE_URL" artifacts: paths: - - "~/.docker/" + - /root/.docker/ build-job: stage: build From ace2beebb8de5e5dc98920e93f80124caa7737ba Mon Sep 17 00:00:00 2001 From: Daniel_I_Am Date: Fri, 3 Sep 2021 21:13:43 +0000 Subject: [PATCH 10/15] Hard-code entire absolute artifact path --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index fddf001..cf0b1fe 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -11,7 +11,7 @@ auth-job: - docker login --username "$REGISTRY_USER" --password "$REGISTRY_PASSWORD" "$REGISTRY_BASE_URL" artifacts: paths: - - /root/.docker/ + - /root/.docker/config.json build-job: stage: build From 87f58b9722e28f23e17ffd87525aed1ae31c9cd6 Mon Sep 17 00:00:00 2001 From: Daniel_I_Am Date: Fri, 3 Sep 2021 21:15:52 +0000 Subject: [PATCH 11/15] Add some debugging information --- .gitlab-ci.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index cf0b1fe..046c379 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -9,6 +9,9 @@ auth-job: image: docker:stable script: - docker login --username "$REGISTRY_USER" --password "$REGISTRY_PASSWORD" "$REGISTRY_BASE_URL" + - ls -a /root/ + - ls /root/.docker/ + - cat /root/.docker/config.json artifacts: paths: - /root/.docker/config.json From aee3e59388ca10b1198e11d237e98800584a0522 Mon Sep 17 00:00:00 2001 From: Daniel_I_Am Date: Fri, 3 Sep 2021 21:18:29 +0000 Subject: [PATCH 12/15] Give up and move to project directory and copy back --- .gitlab-ci.yml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 046c379..c3b177e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -9,12 +9,10 @@ auth-job: image: docker:stable script: - docker login --username "$REGISTRY_USER" --password "$REGISTRY_PASSWORD" "$REGISTRY_BASE_URL" - - ls -a /root/ - - ls /root/.docker/ - - cat /root/.docker/config.json + - cp "/root/.docker/config.json" "./build/.dockerconfigjson" artifacts: paths: - - /root/.docker/config.json + - build/.dockerconfigjson build-job: stage: build @@ -32,6 +30,7 @@ publish-job: tags: - docker script: + - cp "./build/.dockerconfigjson" "/root/.docker/config.json" - docker -H unix:///var/run/docker.sock image push "$REGISTRY_BASE_URL/$DOCKER_IMAGE_NAME:$CI_COMMIT_SHORT_SHA" deploy-job: @@ -44,7 +43,6 @@ deploy-job: - export KUBECONFIG="$KUBE_AUTH" - cp "$ENV_PRODUCTION" "./build/.env.production" - cp "$MYSQL_ENV" "./build/mysql-secret.env" - - cp "~/.docker/config.json" "./build/.dockerconfigjson" - cd "./build" - kubectl apply -k ./ - echo "Waiting for deployment..." From 3f270e0f88d5690c7fed59b5e79444694ac4da9c Mon Sep 17 00:00:00 2001 From: Daniel_I_Am Date: Fri, 3 Sep 2021 21:24:17 +0000 Subject: [PATCH 13/15] Create docker directory before copying file. Add needs to jobs --- .gitlab-ci.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c3b177e..abe2c05 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -25,11 +25,15 @@ build-job: publish-job: stage: publish image: docker:stable + needs: + - auth-job + - build-job dependencies: - auth-job tags: - docker script: + - mkdir "/root/.docker/" - cp "./build/.dockerconfigjson" "/root/.docker/config.json" - docker -H unix:///var/run/docker.sock image push "$REGISTRY_BASE_URL/$DOCKER_IMAGE_NAME:$CI_COMMIT_SHORT_SHA" @@ -37,6 +41,9 @@ deploy-job: stage: deploy when: manual image: google/cloud-sdk + needs: + - auth-job + - publish-job dependencies: - auth-job script: From fe38f88e7372bfc7c18bd81a1a22a743299716a1 Mon Sep 17 00:00:00 2001 From: Daniel-I-Am Date: Fri, 3 Sep 2021 23:40:13 +0200 Subject: [PATCH 14/15] Replace container image dynamically using kustomization.yaml --- .gitlab-ci.yml | 1 + build/k3s.yaml | 2 +- build/kustomization.yaml | 4 ++++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index abe2c05..fc8fce1 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -51,6 +51,7 @@ deploy-job: - cp "$ENV_PRODUCTION" "./build/.env.production" - cp "$MYSQL_ENV" "./build/mysql-secret.env" - cd "./build" + - sed -i "s/DOCKER_IMAGE_TAG/${CI_COMMIT_SHORT_SHA}/g" kustomization.yaml - kubectl apply -k ./ - echo "Waiting for deployment..." - sleep 30 diff --git a/build/k3s.yaml b/build/k3s.yaml index 727bab5..a05a094 100644 --- a/build/k3s.yaml +++ b/build/k3s.yaml @@ -73,7 +73,7 @@ spec: tier: website spec: containers: - - image: registry.chaoticlogic.us/daniel-website:latest + - image: website-image imagePullPolicy: Always name: website ports: diff --git a/build/kustomization.yaml b/build/kustomization.yaml index 1bfbbf6..c11f8d9 100644 --- a/build/kustomization.yaml +++ b/build/kustomization.yaml @@ -15,3 +15,7 @@ secretGenerator: namespace: portfolio envs: - mysql-secret.env +images: + - name: website-image + newName: registry.chaoticlogic.us/daniel-website + newTag: DOCKER_IMAGE_TAG From b280f1ec52e3d086b77ea1c31854e6988d3d92df Mon Sep 17 00:00:00 2001 From: Daniel_I_Am Date: Fri, 3 Sep 2021 21:50:40 +0000 Subject: [PATCH 15/15] Only allow deploy on master branch --- .gitlab-ci.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index fc8fce1..2872890 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -39,6 +39,9 @@ publish-job: deploy-job: stage: deploy + only: + refs: + - master when: manual image: google/cloud-sdk needs: