Mentions légales du service

Skip to content
Snippets Groups Projects
Commit 10ef9d68 authored by Thierry Martinez's avatar Thierry Martinez
Browse files

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.
parent 8807efe8
No related branches found
No related tags found
No related merge requests found
Pipeline #756832 passed
variables: workflow:
CI_TEMPLATE_REGISTRY_HOST: registry.gitlab.inria.fr rules:
TF_STATE_NAME: default - if: $CLOUDSTACK_API_KEY
include: generate-child-pipeline:
- template: Terraform/Base.gitlab-ci.yml # https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/ci/templates/Terraform/Base.gitlab-ci.yml
stages:
- validate
- deploy
- execute
- cleanup
fmt:
tags: tags:
- linux - linux
- small - small
extends: .terraform:fmt
validate:
tags:
- linux
- small
extends: .terraform:validate
before_script:
- cp $SSH_PRIVATE_KEY id_rsa
deploy:
stage: deploy
tags:
- linux
- 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 apply
execute:
stage: execute
image: alpine image: alpine
parallel:
matrix:
- index: [0, 1, 2]
tags:
- terraform
- docker
- runner-$index
script: script:
- echo Greetings from runner $index! - sh generate-child-pipeline.sh > generated-child-pipeline.yml
artifacts:
paths:
- generated-child-pipeline.yml
cleanup: execute-child-pipeline:
stage: cleanup needs:
tags: - generate-child-pipeline
- linux trigger:
- small include:
script: - artifact: generated-child-pipeline.yml
- cd "${TF_ROOT}" job: generate-child-pipeline
- cp $SSH_PRIVATE_KEY id_rsa
- gitlab-terraform plan -var runner_count=0
- gitlab-terraform apply
when: always
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
# We install docker.io to be able to register a docker executor # We install docker.io to be able to register a docker executor
apt-get install --yes gitlab-runner docker.io apt-get install --yes gitlab-runner docker.io
gitlab-runner register --non-interactive \ gitlab-runner register --non-interactive \
--tag-list terraform,docker,runner-${index} \ --tag-list terraform,docker,pipeline-${CI_PARENT_PIPELINE_ID},runner-${index} \
--executor docker --docker-image alpine --url https://gitlab.inria.fr \ --executor docker --docker-image alpine --url https://gitlab.inria.fr \
--registration-token ${REGISTRATION_TOKEN} --registration-token ${REGISTRATION_TOKEN}
) >>/root/log.txt 2>&1 ) >>/root/log.txt 2>&1
# Workaround for child pipeline to work in merge requests
# See: https://gitlab.com/gitlab-org/gitlab/-/issues/222370#note_662695503
workflow:
rules:
- if: $CI_MERGE_REQUEST_IID
- if: $CI_COMMIT_BRANCH
variables:
CI_TEMPLATE_REGISTRY_HOST: registry.gitlab.inria.fr
TF_STATE_NAME: pipeline-$CI_PARENT_PIPELINE_ID
TF_VAR_CI_PARENT_PIPELINE_ID: $CI_PARENT_PIPELINE_ID
include:
- template: Terraform/Base.gitlab-ci.yml # https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/ci/templates/Terraform/Base.gitlab-ci.yml
stages:
- validate
- deploy
- execute
- cleanup
fmt:
tags:
- linux
- small
extends: .terraform:fmt
validate:
tags:
- linux
- small
extends: .terraform:validate
before_script:
- cp $SSH_PRIVATE_KEY id_rsa
deploy:
stage: deploy
tags:
- linux
- small
script:
- cp $SSH_PRIVATE_KEY id_rsa
- gitlab-terraform plan
- gitlab-terraform apply
execute:
stage: execute
image: alpine
parallel:
matrix:
- index: [0, 1, 2]
tags:
- terraform
- docker
- pipeline-$CI_PARENT_PIPELINE_ID
- runner-$index
script:
- echo Greetings from runner $index!
cleanup:
stage: cleanup
tags:
- linux
- small
script:
- cd "${TF_ROOT}"
- cp $SSH_PRIVATE_KEY id_rsa
- 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
set -ex
cat <<EOF
include: "dynamic-pipeline.yml"
variables:
CI_PARENT_PIPELINE_ID: "$CI_PIPELINE_ID"
EOF
...@@ -24,13 +24,13 @@ variable "SSH_PUBLIC_KEY" { ...@@ -24,13 +24,13 @@ variable "SSH_PUBLIC_KEY" {
type = string type = string
} }
variable "runner_count" { variable "CI_PARENT_PIPELINE_ID" {
type = number type = number
} }
resource "cloudstack_instance" "runner" { resource "cloudstack_instance" "runner" {
count = var.runner_count count = 3
name = "gitlabcigallery-terraform-runner-${count.index}" name = "gitlabcigallery-terraform-pipeline-${var.CI_PARENT_PIPELINE_ID}-${count.index}"
service_offering = "Custom" service_offering = "Custom"
template = "ubuntu-20.04-lts" template = "ubuntu-20.04-lts"
zone = "zone-ci" zone = "zone-ci"
...@@ -40,9 +40,10 @@ resource "cloudstack_instance" "runner" { ...@@ -40,9 +40,10 @@ resource "cloudstack_instance" "runner" {
} }
expunge = true expunge = true
user_data = templatefile("cloud-init.sh.tftpl", { user_data = templatefile("cloud-init.sh.tftpl", {
index = count.index index = count.index
REGISTRATION_TOKEN = var.REGISTRATION_TOKEN REGISTRATION_TOKEN = var.REGISTRATION_TOKEN
SSH_PUBLIC_KEY = var.SSH_PUBLIC_KEY SSH_PUBLIC_KEY = var.SSH_PUBLIC_KEY
CI_PARENT_PIPELINE_ID = var.CI_PARENT_PIPELINE_ID
}) })
connection { connection {
type = "ssh" type = "ssh"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment