Cоздание пайплан

Курс очень молодого бойца

Рассмотрим пример создания pipeline на основе gitlab-ci.yaml Посмотрим, какие пункты мы можем внести gitlab.
В gitlab-ci.yaml будет внесены пукнты 3-5 прошлой статьи. То есть, gitlab-ci будет отвечать за создание, тестирование, выпуск образа и развертывание его в рабочем окружении.
Рассмотрим основные шаги пайплан:

  • Заполним его, для этого воспользуемся готовым шаблон пайплайн:

    image: docker:latest
    
    variables:
      DOCKER_DRIVER: overlay
      CONTAINER_TEST_IMAGE: $CI_REGISTRY/$CI_PROJECT_PATH:$CI_COMMIT_REF_NAME
      CONTAINER_RELEASE_IMAGE: $CI_REGISTRY/$CI_PROJECT_PATH:latest
    
    services:
      - docker:dind
    
    stages:
      - build
      - test
      - release
      - deploy
    
    build:
      stage: build
      script:
        - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
        - docker build --pull -t $CONTAINER_TEST_IMAGE . --build-arg=secret_key=secret
        - docker push $CONTAINER_TEST_IMAGE
      only:
        - tags
    
     test:
       image: $CI_REGISTRY/$CI_PROJECT_PATH:$CI_COMMIT_REF_NAME
       stage: test
       services:
         - postgres:11-alpine
       variables:
         SECRET_KEY: runner
         POSTGRES_DB: runner
         POSTGRES_USER: runner
         POSTGRES_PASSWORD: runner
         POSTGRES_HOST: postgres
         POSTGRES_PORT: 5432
         TEST: 1
       script:
         - python3 /code/backend/manage.py qa
       only:
         - tags  
    
    release:
      stage: release
      script:
        - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
        - docker pull $CONTAINER_TEST_IMAGE
        - docker tag $CONTAINER_TEST_IMAGE $CONTAINER_RELEASE_IMAGE
        - docker push $CONTAINER_RELEASE_IMAGE
      only:
        - tags
    
    deploy:
      image: kroniak/ssh-client
      stage: deploy
      script:
        - eval $(ssh-agent -s)
        - ssh-add <(echo "$SSH_PRIVATE_KEY")
        - ssh -o StrictHostKeyChecking=no -p $TESTPORT $TESTUSER@$STAGINGHOST make --directory=$TESTPATH deployfront TAG=$CI_COMMIT_REF_NAME 
      only:
        - tags
    #  when: manual

Для начала разберем переменные используемые в данном файле конфигурации, но которые необхдимо задать в окружении gitlab(Settings->CI\CD->Variables->"Add variables" уберите галочку "Protected variable" для ознакомления она вам не понадобится):

  • SSH_PRIVATE_KEY = приватная часть ключа для доступа к удаленной машине
  • TESTPORT = порт на котором слушает ssh сервер
  • TESTUSER = пользователь у которого есть публичная часть доступа к серверу.
  • TESTHOST = адрес хоста,(ip или dns имя)
  • TESTPATH = путь до папки проекта.

Все остальные переменные перечислены в секции variables (используются в местах где они начинаются с символа$) геренируются в процессе запуска скрипта. Берутся они из gitlab окружения, можно найти в документации к gitlab.

Теперь рассмотрим стадии, в приведенном примере в разделе stages их 4 стадии:

Рассмотрим их более подробно:

Для начала общие части

Рассмотрим общие части шагов пайплайна

  • image - образ внутри которого будет выполняться скрипт
  • stage - стади к которой относится текущая секция
  • services - дополнительные сервисы необходимые для проекта
  • script - непосредственно выполнение логики.