Непрерывная интеграция с GitHub Actions

0
210
views

GitHub Actions — это CI/CD система, интегрированная с GitHub. В первом приближении можно думать о ней, как об аналоге TeamCity или Jenkins, предоставляемом в виде сервиса. Сервис бесплатен для открытых проектов, и даже для закрытых, если ваши билды собираются не слишком долго и/или не слишком часто, — пишет автор блога «Записки программиста» в своей статье, которую мы представляем вашему вниманию.

Настроим GitHub Actions в качестве системы непрерывной интеграции для микросервиса, который ранее был описан в заметках Работа с PostgreSQL в языке Go при помощи pgx и Тестирование проектов на Go с dockertest. Для этого всего лишь нужно создать в репозитории нашего проета файл .github/workflows/run-tests.yaml следующего содержания:

name: run-tests
 on: [push]
 on:
 pull_request:
 env:
   GO_VERSION: 1.12.15
 jobs:
   test:
     name: Run Tests
     runs-on: ubuntu-latest
     steps:
     - name: set up go ${{env.GO_VERSION}}
       uses: actions/setup-go@v1
       with:
         go-version: ${{env.GO_VERSION}}
       id: go
     - name: Check out code into the Go module directory
       uses: actions/checkout@v1
       with:
         fetch-depth: 1
     - name: Build
       run: ./build.sh
     - name: Test
       run: go test -count=1 -v ./…

Думаю, тут безо всяких объяснений понятно, что говорится в файле. Если теперь пушнуть изменения и открыть репозиторий на GitHub’е, то в разделе Actions вы увидите, как GitHub прогоняет тесты проекта. Прошу заметить, что все превосходно работает с dockertest из коробки. Проще некуда!

Впрочем, иногда системных ресурсов агентов (здесь они называются runners), предоставляемых GitHub’ом, может быть недостаточно для задачи. В этом случае вы можете добавить собственных раннеров, развернутых либо на своем железе, либо в каком-нибудь облачном сервисе вроде AWS.

Важно! Необходимо проявлять крайнюю осторожность при добавлении собственных runner’ов в открытые репозитории. Дело в том, что человеку со стороны не составит труда создать pull request, который выполнит на вашем runner’е произвольный код.

Инструкцию по установке self-hosted runner можно найти в настройках репозитория в разделе Actions. При нажатии «Add runner» нужно выбрать ОС и CPU, после чего и появляются инструкция. В качестве ОС и CPU я выбрал Ubuntu и x64 соответственно. Раннер было решено устанавливать на друплет в моем любимом DigitalOcean (ссылка реферальная, что она дает описано в FAQ).

Создаем пользователя, от имени которого будет работать runner:

adduser actions
добавляем его в sudoers
vim /etc/sudoers
su actions
cd

Ставим кое-какие зависимости нашего проекта:

sudo apt update
sudo apt install gcc docker.io
sudo systemctl enable docker
sudo systemctl start docker
разрешаем пользователю actions пользоваться Docker
sudo usermod -a -G docker actions

Наконец, ставим runner, используя команды из инструкции:

mkdir actions-runner && cd actions-runner
curl -O -L ВАШАССЫЛКАНААРХИВ tar xzf ИМЯАРХИВАТГЗ ./config.sh --url УРЛВАШЕГОРЕПОЗИТОРИЯ --token ЗДЕСЬВАШ_ТОКЕН
устанавливаем и запускаем сервис
sudo ./svc.sh install
sudo ./svc.sh start
sudo ./svc.sh status

Если все было сделано правильно, раннер появится в разделе Settings → Actions репозитория. Теперь открываем run-tests.yaml и меняем в нем единственную строчку:

# runs-on: ubuntu-latest
  runs-on: self-hosted

Пушаем, и по выводу htop убеждаемся, что runner зашуршал.

И не забываем самое главное — добавить бейджик с состоянием тестов в README.md проекта.

Само собой разумеется, GitHub Actions можно использовать не только для прогона тестов, но также и для сборки релизов, автоматического деплоя на прод, да и вообще чего пожелаете. Подробности ищите в официальной документации сервиса.

Лично я очень доволен GitHub Actions. Это штука просто работает, и работает хорошо. Одно только не ясно. Вот сколько уже лет IT-индустрии. Почему так сразу нельзя было?

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here