Le but est de faire confiner Ansible dans un container Docker, pour le faire exécuter depuis notre CI.
L’image Docker
Les sources sont sur Github : pad92/docker-ansible-alpine Les images sont sur Docker Hub
Utilisation
Lancer un playbook
docker run -it --rm \
-v ${PWD}:/ansible \
pad92/ansible-alpine:latest \
ansible-playbook -i inventory playbook.yml
Generer la structure d’un role
docker run -it --rm \
-v ${PWD}:/ansible \
pad92/ansible-alpine:latest \
ansible-galaxy init role-name
Execution Interactive avec transfère de clef
docker run -it --rm \
-v $(readlink -f $SSH_AUTH_SOCK):/ssh-agent \ # Transfere de clef
-v ${PWD}:/ansible \
-e SSH_AUTH_SOCK=/ssh-agent \ # Transfere de clef
pad92/ansible-alpine:latest \
sh
La CI
La variable DEPLOY_KEY
doit etre défini dans settings/ci_cd/secret_variable
avec la clef privée qui sera utilisée pour le deployement.
image: docker:git
services:
- docker:dind
variables:
docker_ansible_alpine: ${CI_REGISTRY}/ansible/docker-ansible-alpine:latest
stages:
- test-ansible
- deployment
before_script:
- docker login -u ${CI_REGISTRY_USER} -p ${CI_JOB_TOKEN} ${CI_REGISTRY}
test_syntax:
stage: test-ansible
script:
- docker run -v ${PWD}:/ansible ${docker_ansible_alpine} ansible-playbook -i inventories/inventaire playbooks/playbook.yml --syntax-check
tags:
- docker
deployment:
stage: deployment
script:
- docker run -v ${PWD}/:/ansible
-e "DEPLOY_KEY=${DEPLOY_KEY}"
${docker_ansible_alpine} ansible-playbook --user=ansible --become --become-method=sudo --become-user=root -i inventories/inventaire playbooks/playbook.yml
tags:
- docker
only:
- master
le depot est aussi disponible ici https://git.depad.fr/ansible/docker-ansible-alpine, j’essaye d’éviter d’oublier de push sur les deux :)