Templates déploiement Gitlab CI

Pipeline Gitlab CI

J'ai présenté lors du Drupalcamp de Rennes en mars 2024 mon nouveau sideproject : un ensemble de jobs factorisés pour gitlab ci.

La problématique était la suivante : 

  • je déploie pas mal de sites, sur des infrastructures différentes, tout est automatisé via la Gitlab CI. Quand j'attaque un nouveau projet, je me contente de copier le fichier .gitlab-ci.yml, qui définit toute la procédure, depuis mon projet le plus récent vers ce nouveau projet. Je dois ensuite penser à modifier certaines variables, certains comportements afin que cela marche sur ce nouveau projet, c'est long, et il est facile de faire une erreur.
  • Si je fais des évolutions dans mes jobs, le portage sur les anciens projets est complexe.
  • Je me retrouve entre mes différents projets avec aucune cohérence, au niveau du noms des stages, des jobs lancés, des fonctionnalités...

J'ai décidé de prendre ce problème à la base et j'ai commencé à poser les besoins que j'avais :

  • Une liste de jobs factorisés, dans laquelle je viens piocher en fonction des besoins du projet. Tous ces jobs étant sur un même dépôt. La réutilisation étant géré via des includes. La généralisation des jobs est faite via les variables Gitlab, par exemple le user ssh est une variable $SSH_USER.
  • Ces variables doivent pouvoir être différentes entre les différents environnements (dans mon cas : prod et preprod).
  • Les règles de déploiements sont fixes, un tag de la forme x.y.z lancera un déploiement en prod, un commit / merge sur une branche preprod lancera lui un déploiement en preprod.
  • Je dois assurer la compatibilité ascendante, ainsi une nouvelle fonctionnalité développée ne doit pas casser les déploiements existants.
  • Tout doit être documenté, que ça soit pour mon moi du futur ou pour les curieux afin qu'ils s'en servent comme inspiration.

Voici ce à quoi je suis arrivé : 

Image
Dépôt gitlab ci templates

Un dépôt gitlab qui contient des jobs, factorisés : 

Image
Gitlab ci jobs drupal

Pour la documentation, j'ai utilisé l'outil opensource de meta : Docusaurus. Qui génère un mini site statique à partir de fichiers markdown, qui sont directement dans le dépôt : 

Image
Fichier markdown utilisé par docusaurus

Cette documentation est hébergée via Gitlab pages avec un nom de domaine personnalisé : https://gitlab-ci-templates.kgaut.net/

Comment ça marche ?

Tous mes jobs sont dans le dossier « templates » du dépôt : https://gitlab.com/kgaut/gitlab-ci-templates/-/tree/main/templates?ref_type=heads

Chaque type de job est dans un fichier spécifique afin de pouvoir, à la carte, utiliser que ce dont on a besoin suivant notre projet :

Image
Job Drupal gitlab ci

Voici par exemple le contenu du job de déploiement :

variables:
  DRUPAL_SITE_PATH : 'web/sites/default'
  MIGRATION_SCRIPT_PATH : 'scripts'
  MIGRATION_SCRIPT_PREDEPLOY_PATH : "$MIGRATION_SCRIPT_PATH/pre-deploy"
  MIGRATION_SCRIPT_POSTDEPLOY_PATH : "$MIGRATION_SCRIPT_PATH/post-deploy"
.deploy:
  stage: deploy
  extends:
    .ssh
  script:
    - wget -O drupal-deploy.sh "https://gitlab.com/kgaut/gitlab-ci-templates/-/raw/$CI_TEMPLATE_VERSION/scripts/drupal-deploy.sh"
    - $SSH_CHAIN 'bash -s' < ./drupal-deploy.sh $PROJECT_ROOT $DRUPAL_SITE_PATH $DRUSH_BIN $CI_ENVIRONMENT_NAME $CI_COMMIT_SHORT_SHA $CI_COMMIT_TAG $DRUSH_ALIAS
prod:deploy:
  extends:
    - .prod
    - .deploy
preprod:deploy:
  extends:
    - .preprod
    - .deploy

Chaque job défini des variables par défaut qui peuvent être surchargées par projet. Toutes les variables sont référencées ici : https://gitlab-ci-templates.kgaut.net/docs/bases/variables

Mise en application

Je commence petit à petit à basculer tous mes sites sur ces templates, voici par exemple le .gitlab-ci.yml de mon site, sur lequel vous êtes actuellement : 

variables:
  CI_TEMPLATE_VERSION: &CI_TEMPLATE_VERSION 0.4.0 # Le tag de mon projet de déploiement
  PATH_TO_THEME: "./web/themes/custom/kgaut_2024" 
  ASSETS_IMAGE: "registry.gitlab.com/kgaut/docker-node-images:19"
  ASSETS_ARTEFACTS: "./web/themes/custom/kgaut_2024/css"
  SENTRY_PROJECT : 'kgautnet'
  SENTRY_ORG : 'kgautnet'
  DB_PATH: 'db'
  DIFFS_PATH: 'files/diffs'
  ENV_PREPROD_DISABLED: 1
  QA_DOCKER_IMAGE: wodby/drupal-php:8.2-dev
  PHPCS_DOCKER_IMAGE: $QA_DOCKER_IMAGE
  PHPSTAN_DOCKER_IMAGE: $QA_DOCKER_IMAGE
include: # Ici c'est l'inclusion de l'ensemble des jobs utilisés pour le déploiement du site
  - project: kgaut/gitlab-ci-templates
    ref: *CI_TEMPLATE_VERSION
    file:
      - '/templates/generic/stages-variables-extends.yml'
      - '/templates/drupal/backup.yml'
      - '/templates/drupal/diff-config.yml'
      - '/templates/generic/diff-repository.yml'
      - '/templates/generic/assets.yml'
      - '/templates/drupal/deploy.yml'
      - '/templates/generic/sentry.yml'
      - '/templates/drupal/post-deploy-clear-cache.yml'
      - '/templates/generic/scheduled-clean-dump.yml'
      - '/templates/drupal/scheduled-backup.yml'
      - '/templates/generic/deploy-tracking.yml'
      - '/templates/qa/phpstan.yml'
      - '/templates/qa/phpcs.yml'

Certaines variables sont définies directement dans ce fichier, et d'autres, pour des raisons de sécurités sont directement définies sur Gitlab : 

Image
Variables Gitlab CI

Les variables sur Gitlab permettent aussi de définir les variables qui sont différentes par environnement (host SSH, User SSH par exemple) dans le cas courant je n'ai qu'un seul environnement : la production.

Et voici le déploiement en lui même : 

Image
Pipeline Gitlab CI

Via la variable CI_TEMPLATE_VERSION je fais référence à un tag de mes templates de déploiement, ainsi, même si je fais des évolutions, les templates sont bloqués et je ne risque pas de casser des déploiements qui fonctionnent. Une montée de version est évidement possible, mais sera faite en pleine conscience. Les différents tags sont visibles ici : https://gitlab.com/kgaut/gitlab-ci-templates/-/tags

La branche principale est main, elle peut contenir des modifications en test, un tag ne sera créé que lorsque tout est considéré comme stable.

J'ai profité du troisième jour du drupalcamp afin d'ajouter un peu de QA, avec pour l'instant uniquement des jobs phpstan et phpcs. Ces jobs crééent des artefacts qui sont récupéré par gitlab. Dans les merge request, cela permet de voir les différents problèmes de qualité de code.

En conclusion

Le but de ce dépôt n'est pas forcément d'être utilisé tel quel par d'autres personnes, le processus de déploiement n'est pas forcément compatible avec le votre ou celui de votre agence. Néanmoins, je pense qu'il y a des idées à piquer, ne serai-ce que dans le concept global ou dans des jobs en particulier. 

Lors de la conférence de présentation, on m'a posé la question de l'avenir de ce projet. Je continue à le mettre en place sur mes projets, et à ajouter des fonctionnalités au fur et à mesure, je ne compte donc pas l'abandonner comme cela.

Je suis preneur de tout retour, idée, question !

Retrouvez :

 

Commentaires

Как быстро получить права, удостоверения на охранные услуги, спецтехнику и другие документы

Получение различных права — важный шаг для тех, кто хочет легально работать в сферах охраны, управления спецтехникой и других направлениях. Чтобы оформить нужные сертификаты быстро и без лишних проблем, нужно следовать нескольким простым рекомендациям.

Выбор авторизованной организации

Ищите лицензированные учебные заведения или центры, которые предоставляют интенсивные курсы по интересующей вас специальности. Это сокращает время подготовки и повышает шансы успешно сдать экзамен.

Особенности получения лицензии на охрану

- Пройдите медицинское обследование, необходимое для допуска к занятиям.
- Обучение обычно включает теорию (законодательство, права и обязанности) и практические навыки (самооборона, работа с техникой охраны).
- По окончании курсов сдается экзамен для получения удостоверения.

Получение прав на корки на машину спецназначения

- Выбирайте специализированные курсы по конкретному виду техники — экскаваторы, погрузчики, автокраны и т.п.
- Программа обучения включает теорию безопасности и практическое управление техникой.
- После обучения нужно сдать экзамен в Гостехнадзоре или соответствующем органе для выдачи сертификата права на автопогрузчик купить

Оформление других лицензий

Для различных специальностей (электромонтаж, сварочные работы, высотные работы и др.) тоже нужны специализированные курсы и сертификация. Важно выбирать центры с официальной аккредитацией и подходящей лицензией для выдачи подтверждающих документов.

Полезные советы для быстрой и успешной подготовки

- Своевременно собирайте все необходимые документы (паспорт, медсправки, фото).
- Пользуйтесь официальными учебниками и методическими материалами.
- Не откладывайте обучение на последний момент, выбирайте интенсивные курсы.
- Заранее узнайте правила сдачи экзаменов, чтобы избежать стресса.

Быстро получить права на охрану, спецтехнику и другие направления реально при грамотно организованной подготовке, правильном выборе курсов и соблюдении всех требований законодательства. Будьте внимательны и не пренебрегайте подготовкой для уверенного прохождения аттестаций!

Как быстро получить права на водительское удостоверение

Получение водительских прав на автомобили — важный шаг для тех, кто хочет начать независимо водить. В этой статье рассмотрим, как максимально оперативно оформить водительские документы.

1. Выбор учебного центра

Для ускоренного получения удостоверения лучше всего выбирать аккредитованные автошколы, которые предлагают быстрые тренинги обучения.

2. Прохождение подготовки

- Выбирайте курс с минимальным сроком — обычно от 1 до 2 месяцев.
- Проходите теорию и тренировки в удобном для себя графике.
- Можно дополнительно заниматься по учебным материалам для закрепления знаний.

3. Медицинская заключение

Для прохождения экзаменов обязательно необходима медицинское подтверждение. Получите её в ближайшей поликлинике или у специалистов.

4. Сдача экзаменов

- Теоретический экзамен можно подготовить через онлайн-тестирование и практические занятия.
- Практический экзамен с инструктором проводится в ГИБДД или МФЦ.
- При хорошей подготовке и правильной организации можно купить права за один визит.

5. Оформление прав

После успешного прохождения экзаменов документы выдаются в течение нескольких дней.

Советы для ускорения процесса

- Записывайтесь в автошколу заранее, чтобы не ждать набор группы.
- Используйте современные онлайн-платформы для теории.
- Занимайтесь вождением с инструктором постоянно.
- Подготовьте все документы заранее для быстрого оформления.

Получить права на управление автомобилем быстро — вполне реально при четком планировании, правильном выборе автошколы и серьезном подходе к обучению.

Ajouter un commentaire

Ne sera pas publié
CAPTCHA
Désolé, pour ça, mais c'est le seul moyen pour éviter le spam...