Suite à ma à l’écriture de ma configuration
Terraform permettant de provisionner des
machines EC2 AWS, je me suis fixé comme objectif de configurer Gitlab pour qu’il
utilise mes propres runners dynamiquement.
Pour provisionner la machine je vous conseille d’utiliser la configuration du
précédent billet.
Ecriture du playbook Ansible
Je vais utiliser le role gitlab-runner de
riemers ↗ ce qui va simplifier
énormément son écriture:
ansible-galaxy install riemers.gitlab-runner
Le playbook :
- hosts : tag_Name_gitlab_runner
- gitlab_runner_registration_token : " {{ lookup('env','GITLAB_TOKEN') }} "
- gitlab_runner_coordinator_url : " https://gitlab.com/ "
- name : " Example autoscaling GitLab Runner "
cache_s3_bucket_name : " gitlab-runner-test "
cache_s3_access_key : " {{ lookup('env','AWS_ACCESS_KEY_ID') }} "
cache_s3_secret_key : " {{ lookup('env','AWS_SECRET_ACCESS_KEY') }} "
executor : " docker+machine "
MachineDriver : " amazonec2 "
MachineName : " gitlab-runner-%s "
" amazonec2-access-key={{ lookup('env','AWS_ACCESS_KEY_ID') }} " ,
" amazonec2-secret-key={{ lookup('env','AWS_SECRET_ACCESS_KEY') }} " ,
" amazonec2-region=eu-west-2 " ,
" amazonec2-vpc-id=vpc-dsdsdsdsdsdsd " ,
" amazonec2-subnet-id=subnet-sdsdsdsdsdds " ,
" amazonec2-tags=gitlab-runner-dyn " ,
" amazonec2-instance-type=t2.micro "
- name : Install docker-machine
url : https://gitlab-docker-machine-downloads.s3.amazonaws.com/v0.16.2-gitlab.2/docker-machine
dest : /usr/local/bin/docker-machine
Avant de la lancer il faudra au préalable exporter les variables suivantes avec
vos propres valeurs :
export AWS_ACCESS_KEY_ID = " xxcxcxcxcxcxcxcx "
export AWS_SECRET_ACCESS_KEY = " ddssd/dsds/sdssdssdsdsdsdsd "
export GITLAB_TOKEN = " dsdsdsdsdsdgrfdv "
Il faut également récupérer le vpc et le subnet de votre machine EC2 et les
mettre dans le playbook:
aws ec2 describe-instances --region eu-west-2 | grep -iE " vpc|subnet "
C’est on est prêt on peut lancer le playbook en utilisant l’inventaire ec2 :
ansible-playbook provision-runner.yml
Au bout de quelques minutes tout devrait être configuré. Reste à créer le bucket
S3.
Lançons un test sur simple job. Le resultat
Running with gitlab-runner 14.4.0 (4b9e985a)
on Example autoscaling GitLab Runner REgPydPB
Preparing the " docker+machine " executor
Using Docker executor with image registry.gitlab.com/gitlab-org/terraform-images/releases/terraform:1.0.3 ...
Authenticating with credentials from job payload (GitLab Registry )
Pulling docker image registry.gitlab.com/gitlab-org/terraform-images/releases/terraform:1.0.3 ...
Using docker image sha256:11c22bfccc890f4912745d868b2de1a1e3a224bdfce5bf90e64386881b014d62 for registry.gitlab.com/gitlab-org/terraform-images/releases/terraform:1.0.3 with digest registry.gitlab.com/gitlab-org/terraform-images/releases/terraform@sha256:414ed3939a58a458fe945ceff9660b65df18b0a00678cd6f0f28b0a4d1563259 ...
Running on runner-regpydpb-project-31197695-concurrent-0 via runner-regpydpb-gitlab-runner-1637074439-dab4db3c...
/builds/Bob74/test-aws/.terraform/: found 9 matching files and directories
Uploading cache.zip to https://gitlab-runner-steph.s3.dualstack.eu-west-2.amazonaws.com/project/31197695/builds/Bob74/test-aws-1
Cleaning up project directory and file based variables
Tout fonctionne le cache est bien provisionné dans le bucket S3 et notre machine
apparaît dans la console AWS.
Il faut encore travailler la partie sécurisation du tout mais ca prend le bon
chemin. Renovate va pouvoir
remplir sa mission en toute quiétude.