Skip to main content

pipeline-gitlab-ansible

Pipeline CI/CD GitLab avec Ansible

Les pipelines CI/CD de GitLab et Ansible sont des outils puissants qui peuvent être combinés pour automatiser le provisionnement de l'infrastructure, la gestion de la configuration et le déploiement d'applications. Vous trouverez ci-dessous un aperçu de la manière dont ils peuvent fonctionner ensemble et un exemple de base pour commencer.

Pipeline GitLab avec Ansible

  1. GitLab CI/CD Pipeline:
    • GitLab CI/CD vous permet de définir des pipelines dans un fichier .gitlab-ci.yml.
    • Les pipelines se composent d'étapes et de tâches qui automatisent des tâches telles que la création, le test et le déploiement d'applications.
  2. Ansible:
    • Ansible est un outil d'automatisation open source utilisé pour la gestion de la configuration, le déploiement d'applications et l'orchestration.
    • Il utilise des playbooks basés sur YAML pour définir les tâches et gérer l'infrastructure.

Comment ils travaillent ensemble

  1. Les pipelines CI/CD de GitLab peuvent déclencher des playbooks Ansible pour automatiser des tâches telles que :

    • Provisionnement de l'infrastructure (par exemple, création de machines virtuelles, de conteneurs ou de ressources cloud).
    • Configuration des serveurs (par exemple, installation de logiciels, configuration des utilisateurs ou configuration des services).
    • Déploiement d'applications (par exemple, transmission de code vers des serveurs ou des conteneurs).

Exemple : pipeline CI/CD GitLab avec Ansible

Voici un exemple de base d’un pipeline CI/CD GitLab qui utilise Ansible pour déployer une application.

  1. Structure du répertoire
project/
├── .gitlab-ci.yml
├── ansible/
│ ├── inventory
│ ├── playbook.yml
│ └── roles/
│ └── deploy/
│ └── tasks/
│ └── main.yml
└── app/
└── (your application code)
  1. .gitlab-ci.yml
stages:
- deploy

deploy_to_production:
stage: deploy
script:
- apt-get update && apt-get install -y ansible sshpass
- ansible-playbook -i ansible/inventory ansible/playbook.yml
only:
- main
  1. ansible/inventory
[production]
192.168.1.10 ansible_user=ubuntu ansible_ssh_private_key_file=/path/to/private_key
  1. ansible/playbook.yml
- hosts: production
become: yes
roles:
- deploy
  1. ansible/roles/deploy/tasks/main.yml

Nous allons initiés le roles/deploy:

ansible-galaxy init roles/deploy

- name: Ensure application directory exists
file:
path: /opt/myapp
state: directory

- name: Copy application code
copy:
src: ../../../app/
dest: /opt/myapp

- name: Restart application service
systemd:
name: myapp
state: restarted

Points clés

  1. Accès SSH :
    • Assurez-vous que le programme d'exécution GitLab dispose d'un accès SSH aux serveurs cibles (par exemple, à l'aide de clés SSH).
    • Utilisez sshpass ou la redirection d'agent SSH si nécessaire.
  2. Installation d'Ansible :
    • Installez Ansible sur le programme d'exécution GitLab ou utilisez une image Docker avec Ansible préinstallé.
  3. Gestion secrète :
    • Utilisez les variables CI/CD GitLab ou un gestionnaire de secrets pour stocker en toute sécurité des données sensibles telles que des clés SSH ou des informations d'identification API.
  4. Idempotence :
    • Assurez-vous que vos playbooks Ansible sont idempotents, ce qui signifie qu'ils peuvent être exécutés plusieurs fois sans provoquer de modifications involontaires.

Cas d'utilisation avancés

  • Inventaire dynamique : Utilisez des scripts d’inventaire dynamique (par exemple, pour AWS, Azure ou GCP) pour gérer les ressources cloud.

  • Terraform + Ansible : combinez Terraform pour le provisionnement de l'infrastructure et Ansible pour la gestion de la configuration.

  • Docker/Kubernetes : utilisez Ansible pour gérer les conteneurs Docker ou les clusters Kubernetes.

Conclusion

En intégrant GitLab CI/CD à Ansible, vous pouvez créer un pipeline d'automatisation robuste pour la gestion des infrastructures et des applications. @copyright MEKOO-GROUP