Ansible dans un container Docker

Ansible dans un container Docker

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 :)


Suggestions de lecture :

comments powered by Disqus