Mentions légales du service

Skip to content
Snippets Groups Projects
Commit ffaaf4a6 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 #756826 failed
variables:
CI_TEMPLATE_REGISTRY_HOST: registry.gitlab.inria.fr
TF_STATE_NAME: default
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
stages:
- validate
- deploy
- execute
- cleanup
fmt:
generate-child-pipeline:
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 -var runner_count=0
- gitlab-terraform apply
- gitlab-terraform plan -var runner_count=3
- gitlab-terraform apply
execute:
stage: execute
image: alpine
parallel:
matrix:
- index: [0, 1, 2]
tags:
- terraform
- docker
- runner-$index
script:
- echo Greetings from runner $index!
- sh generate-child-pipeline.sh > generated-child-pipeline.yml
artifacts:
paths:
- generated-child-pipeline.yml
cleanup:
stage: cleanup
tags:
- linux
- small
script:
- cd "${TF_ROOT}"
- cp $SSH_PRIVATE_KEY id_rsa
- gitlab-terraform plan -var runner_count=0
- gitlab-terraform apply
when: always
execute-child-pipeline:
needs:
- generate-child-pipeline
trigger:
include:
- artifact: generated-child-pipeline.yml
job: generate-child-pipeline
......@@ -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-${PIPELINE_ID},runner-${index} \
--executor docker --docker-image alpine --url https://gitlab.inria.fr \
--registration-token ${REGISTRATION_TOKEN}
) >>/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
echo <<EOF
include "dynamic-pipeline.yml"
variables:
CI_PARENT_PIPELINE_ID: "$CI_PIPELINE_ID"
EOF
......@@ -24,13 +24,13 @@ variable "SSH_PUBLIC_KEY" {
type = string
}
variable "runner_count" {
variable "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.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
PIPELINE_ID = var.PIPELINE_ID
})
connection {
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