Ansible dans un container Docker

Contenu

Le but est de faire confionner ansible dans un container Docker, pour le faire executer 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 transfere 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 defini dans settings/ci_cd/secret_variable avec la clef privee qui sera utilisee 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’eviter d’oublier de push sur les deux :)


Pascal

comments powered by Disqus