---
# System prepended metadata

title: gitlab-ci

---

# gitlab-ci
Что нужно сделать:
1. Спроектировать pipeline, который должен состоять как минимум из трех этапов:
Тест -> сборка -> деплой
2. Задача этапа тестирования - не пропустить merge request, если тесты не проходят. (джоба краснеет -> пайп краснеет)
*Напомню, что в настройках проекта есть запрет на мерж, если пайплайн красный
**Если у вас нет тестов на проекте - напишите.
***Если не умеете - придумайте какую-то симуляцию теста, которую будет можно пройти/не пройти.
3. Задача этапа сборки - собрать исполняемые файлы проекта (в случае .net - скорее всего необходимо скомпиллировать в бинарь) и выложить результат как job artifact
4. Задача этапа деплоя - необходимо вытягивать артефакт с джобы предыдущего этапа (из джобы сборки).
Сделать это можно через api gitlab-а.
Затем распаковывать их на выбранном раннере в директорию /project
Джобы этого этапа должны появляться только на master-ветке вашего проекта и должны иметь ручное управление (manual).

Что показать ментору и на что ему нужно будет обратить внимание:
1. Готовую версию вашего .gitlab-ci.yaml в которой есть
3 stage-а: test - build - deploy
2. Этап тест блокирует возможность мержа в мастер ветку при непрохождении тестов.
3. Этап билд собирает и выкладывает ваш проект в виде артефакта джобы (zip-архивчик становится доступным для скачивания, если зайти в завершенную джобу)
4. Этап деплой работает только на мастер ветке,
имеется manual-джобы, которые скачивают билд и пробрасывают их на соответствующий ранер
# Ответы
```
stages:
  - test
  - build
  - deploy


Test:
  stage: test
  script: 
    - ls -la
    - if [ -f ./docker-compose.yml -a -f ./Convertet_C-F.sln ]; then echo "ok"; else false; fi;
  tags:
    - "dev"

Build:
  stage: build
  script:
    - dotnet build "Convertet C-F" -c Release -o ./artifacts/tamplate_project
  artifacts:
    name: "Release"
    paths:
      - ./artifacts/tamplate_project
    untracked: false
    expire_in: 1 days
  tags:
    - "dev"
  allow_failure: false

Deploy:
  stage: deploy
  script:
    - curl --location --output Release.zip https://gitlab.com/api/v4/projects/$CI_PROJECT_ID/jobs/artifacts/$CI_COMMIT_REF_NAME/download?job=Build
    - unzip Release -d ~/project
  when: manual
#  only: 
#    - master

  tags:
    - "dev"

```
Поставил галочку на Pipelines must succeed для блокировки мерджа если пайплайн не сработал
![](https://i.imgur.com/coRWUVF.png)

3. Этап билд собирает и выкладывает ваш проект в виде артефакта джобы (zip-архивчик становится доступным для скачивания, если зайти в завершенную джобу)
![](https://i.imgur.com/8PV15tk.png)
4. Этап деплой работает только на мастер ветке,
имеется manual-джобы, которые скачивают билд и пробрасывают их на соответствующий ранер
Закомментировал условие, чтобы проверить на feature ветке
![](https://i.imgur.com/CtPucYH.png)
![](https://i.imgur.com/t9lKm5y.png)
![](https://i.imgur.com/9XJozJr.png)



