Выполнение домашнего задания по теме "9.6. Gitlab"
Q/A
Задание 1
Подготовка к выполнению
- Необходимо подготовить gitlab к работе по инструкции
- Создайте свой новый проект
- Создайте новый репозиторий в gitlab, наполните его файлами
- Проект должен быть публичным, остальные настройки по желанию
Ссылка на проект: https://netology-sao.gitlab.yandexcloud.net/dannc/netology-devops-gitlab.
Зеркало проекта на github: dannecron/netology-devops-gitlab.
Задание 2
Основная часть
DevOps
В репозитории содержится код проекта на python. Проект - RESTful API сервис. Ваша задача автоматизировать сборку образа с выполнением python-скрипта:
- Образ собирается на основе centos:7
- Python версии не ниже 3.7
- Установлены зависимости:
flaskflask-restful- Создана директория
/python_api- Скрипт из репозитория размещён в /python_api
- Точка вызова: запуск скрипта
- Если сборка происходит на ветке
master: должен подняться pod kubernetes на основе образаpython-api, иначе этот шаг нужно пропустить
Dockerfile для приложения выглядит следующим образом:
FROM centos:7
RUN yum install -y python3 curl
COPY src/requirements.txt /tmp/requirements.txt
RUN pip3 install -r /tmp/requirements.txt
COPY src/ /python_api/
EXPOSE 5290
CMD ["python3", "/python_api/python-api.py"]
В gitlab-ci выделено 3 стадии:
buildtest(для необязательного задания)deploy
В рамках build производится два пайплайна:
-
pre-build: формирование тэга для образа: на дефолтной ветке сборка идёт с тэгомlatest, на MR с названием ветки.--- pre-build: image: busybox:latest stage: build script: - | if [[ "$CI_COMMIT_BRANCH" == "$CI_DEFAULT_BRANCH" ]]; then tag="latest" echo "Running on default branch '$CI_DEFAULT_BRANCH': tag = 'latest'" else tag="$CI_COMMIT_REF_SLUG" echo "Running on branch '$CI_COMMIT_BRANCH': tag = $tag" fi - echo "DOCKER_IMAGE=netology-devops-gitlab:${tag}" > docker.env artifacts: reports: dotenv: docker.env -
docker-build: построение и отправка образа в registry.docker-build: stage: build variables: DOCKER_DRIVER: overlay2 DOCKER_TLS_CERTDIR: "" DOCKER_HOST: tcp://localhost:2375/ image: cr.yandex/yc/metadata-token-docker-helper:0.2 services: - docker:19.03.1-dind needs: - pre-build script: - docker build --pull -t "cr.yandex/${YA_DOCKER_REGISTRY}/${DOCKER_IMAGE}" -f docker/Dockerfile . - docker push "cr.yandex/${YA_DOCKER_REGISTRY}/${DOCKER_IMAGE}" rules: - if: $CI_COMMIT_BRANCH exists: - docker/Dockerfile
В данных пайплайнах используется переменная YA_DOCKER_REGISTRY, которая добавлена в CI/CD-переменные проекта.
Все остальные переменные CI_* являются предопределёнными.
Стадия deploy состоит из одного шага:
deploy:
image: gcr.io/cloud-builders/kubectl:latest
stage: deploy
needs:
- pre-build
- docker-build
script:
- kubectl config set-cluster k8s --server="$KUBE_URL" --insecure-skip-tls-verify=true
- kubectl config set-credentials admin --token="$KUBE_TOKEN"
- kubectl config set-context default --cluster=k8s --user=admin
- kubectl config use-context default
- sed -i "s/__YA_REGISTRY__/${YA_DOCKER_REGISTRY}/" docker/k8s.yaml
- sed -i "s/__DOCKER_IMAGE__/${DOCKER_IMAGE}/" docker/k8s.yaml
- kubectl apply -f docker/k8s.yaml
Успешность деплоя можно проверить
Product Owner
Вашему проекту нужна бизнесовая доработка: необходимо поменять JSON ответа на вызов метода GET
/rest/api/get_info, необходимо создать Issue в котором указать:
- Какой метод необходимо исправить
- Текст с
{ "message": "Already started" }на{ "message": "Running" }- Issue поставить label: feature
Ссылка на issue: https://netology-sao.gitlab.yandexcloud.net/dannc/netology-devops-gitlab/-/issues/1
Developer
Вам пришел новый Issue на доработку, вам необходимо:
- Создать отдельную ветку, связанную с этим issue
- Внести изменения по тексту из задания
- Подготовить Merge Request, влить необходимые изменения в
master, проверить, что сборка прошла успешно
Merge-request: https://netology-sao.gitlab.yandexcloud.net/dannc/netology-devops-gitlab/-/merge_requests/1.
Tester
Разработчики выполнили новый Issue, необходимо проверить валидность изменений:
- Поднять докер-контейнер с образом
python-api:latestи проверить возврат метода на корректность- Закрыть Issue с комментарием об успешности прохождения, указав желаемый результат и фактически достигнутый
Для проверки необходимо авторизоваться в registry и выполнить команду
docker run --rm -d -p "5290:5290" cr.yandex/crp4ua679vouef3vqg87/netology-devops-gitlab:issue-1
А затем выполнить curl-запрос на localhost:5290.
Автоматизируйте работу тестировщика, пусть у вас будет отдельный конвейер, который автоматически поднимает контейнер и выполняет проверку, например, при помощи curl. На основе вывода - будет приниматься решение об успешности прохождения тестирования.
Для автоматизации работы тестировщика в рамках стейджа test был написан pipeline:
test-api:
image: alpine/curl:latest
stage: test
variables:
PYTHON_API_HOSTNAME: python-api
services:
- name: "cr.yandex/${YA_DOCKER_REGISTRY}/${DOCKER_IMAGE}"
alias: python-api
needs:
- pre-build
- docker-build
script:
- ./test/validate_api.sh
Итог
После успешного прохождения всех ролей - отправьте ссылку на ваш проект в гитлаб, как решение домашнего задания
Ссылка на проект в gitlab находится в начале данного документа.

