From 573c58b163c738bb703e0ccc1348b771bcb89495 Mon Sep 17 00:00:00 2001 From: Thierry Martinez <Thierry.Martinez@inria.fr> Date: Wed, 15 Feb 2023 17:31:42 +0100 Subject: [PATCH] Fix #2: Unique state and runner for a given pipeline This commit makes state filename unique for a given pipeline (and remove this state in the cleaning phase), and adds a unique tag to the runners created for the pipeline for jobs not to be run in runners from other pipelines that run in parallel. --- .gitlab-ci.yml | 20 ++++++++++++++------ cloud-init.sh.tftpl | 2 +- main.tf | 7 ++++--- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1affdae..5199e9f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,6 +1,11 @@ variables: CI_TEMPLATE_REGISTRY_HOST: registry.gitlab.inria.fr - TF_STATE_NAME: default + TF_STATE_NAME: pipeline-$CI_PIPELINE_ID + TF_VAR_CI_PIPELINE_ID: $CI_PIPELINE_ID + +workflow: + rules: + - if: $CLOUDSTACK_API_KEY include: - template: Terraform/Base.gitlab-ci.yml # https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/ci/templates/Terraform/Base.gitlab-ci.yml @@ -32,20 +37,23 @@ deploy: - small script: - cp $SSH_PRIVATE_KEY id_rsa - - gitlab-terraform plan -var runner_count=0 - - gitlab-terraform apply - - gitlab-terraform plan -var runner_count=3 + - gitlab-terraform plan - gitlab-terraform apply +# Variable interpolation on job tags do not expand $CI_PIPELINE_ID + execute: stage: execute image: alpine parallel: matrix: - index: [0, 1, 2] + variables: + PIPELINE_ID: $CI_PIPELINE_ID tags: - terraform - docker + - pipeline-$PIPELINE_ID - runner-$index script: - echo Greetings from runner $index! @@ -58,6 +66,6 @@ cleanup: script: - cd "${TF_ROOT}" - cp $SSH_PRIVATE_KEY id_rsa - - gitlab-terraform plan -var runner_count=0 - - gitlab-terraform apply + - gitlab-terraform destroy + - 'curl --user "gitlab-ci-token:$CI_JOB_TOKEN" --request DELETE "$CI_API_V4_URL/projects/$CI_PROJECT_ID/terraform/state/$TF_STATE_NAME"' when: always diff --git a/cloud-init.sh.tftpl b/cloud-init.sh.tftpl index 2b4d6de..33f0670 100644 --- a/cloud-init.sh.tftpl +++ b/cloud-init.sh.tftpl @@ -16,7 +16,7 @@ # We install docker.io to be able to register a docker executor apt-get install --yes gitlab-runner docker.io gitlab-runner register --non-interactive \ - --tag-list terraform,docker,runner-${index} \ + --tag-list terraform,docker,pipeline-${CI_PIPELINE_ID},runner-${index} \ --executor docker --docker-image alpine --url https://gitlab.inria.fr \ --registration-token ${REGISTRATION_TOKEN} ) >>/root/log.txt 2>&1 diff --git a/main.tf b/main.tf index 7683dcf..70cbb96 100644 --- a/main.tf +++ b/main.tf @@ -24,13 +24,13 @@ variable "SSH_PUBLIC_KEY" { type = string } -variable "runner_count" { +variable "CI_PIPELINE_ID" { type = number } resource "cloudstack_instance" "runner" { - count = var.runner_count - name = "gitlabcigallery-terraform-runner-${count.index}" + count = 3 + name = "gitlabcigallery-terraform-pipeline-${var.CI_PIPELINE_ID}-${count.index}" service_offering = "Custom" template = "ubuntu-20.04-lts" zone = "zone-ci" @@ -43,6 +43,7 @@ resource "cloudstack_instance" "runner" { index = count.index REGISTRATION_TOKEN = var.REGISTRATION_TOKEN SSH_PUBLIC_KEY = var.SSH_PUBLIC_KEY + CI_PIPELINE_ID = var.CI_PIPELINE_ID }) connection { type = "ssh" -- GitLab