Недавно, в GitHub появилась возможность использовать workflows для различных задач. Например, можно сделать флов для проверки вашего кода перед тем как код будет смерджен в какую-то из бранчей ( например — master). Я приведу пример использования lint для Terrafrom-а, т.е я хочу чтобы код работал не только у меня локально, но и после того как я его запушу в репозиторий — он будет проходить проверку и даст мне знать если что-то пойдет не так.
Структура моего .github фолдера выглядит так:
$ tree .github | grep -Ev "_BK"
.github
|-- FUNDING.yml
|-- ISSUE_TEMPLATE
| |-- bug_report.md
| |-- custom.md
| `-- feature_request.md
|-- actions
|-- lock.yml
|-- move.yml
|-- no-response.yml
|-- stale.yml
`-- workflows
|-- terraform-lint.yaml
3 directories, 11 files
Где:
- FUNDING.yml — Служит файлом для настройки донатинга проекта. Добавил чтобы было…
- actions — Папка для yaml-файлов с конфигурацией действий для workflows. Т.е описываем что можно выполнять и каким образом. У меня в данном случае — папка пуска и я использую только workflows с готовым примером.
- workflows — Это папка в которой лежат yaml-файлы с ворк-фловами, т.е файлами конфигураций при работе с вашим проектом. Например, проверка орфограции, выполнение init & plan & apply для Terrafrom-а ( в моем случае). Т.е я хочу сказать — это что-то типа CI/CD в GitHub и похожу что Микромелкие сперли некоторые из фичей с GitLab CI.
Создаем GitHub workflows с actions для Terraform в Unix/Linux
GitHub Actions позволяют создавать собственные рабочие процессы жизненного цикла разработки программного обеспечения (SDLC) непосредственно в вашем репозитории GitHub.
Мой самый простой lint для Terraform выглядит:
$ cat .github/workflows/terraform-lint.yaml
---
name: terraform-lint
on: [push, pull_request]
jobs:
delivery:
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@master
- name: Lint Terraform
uses: actionshub/terraform-lint@master
Я не создавал экшены и взял готовое использование проекта ( написанного кем-то до меня).
Еще, имеется и другой пример использование:
---
name: 'Terraform GitHub Actions'
# on:
# pull_request:
# branches:
# - master
on:
- pull_request
jobs:
terraform:
name: 'Terraform'
runs-on: ubuntu-latest
steps:
- name: 'Check out code'
uses: actions/checkout@master
- name: 'Terraform Format'
uses: hashicorp/terraform-github-actions@master
with:
tf_actions_version: 0.12.13
tf_actions_subcommand: 'fmt'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: 'Terraform Init'
uses: hashicorp/terraform-github-actions@master
with:
tf_actions_version: 0.12.13
tf_actions_subcommand: 'init'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TF_ACTION_WORKING_DIR: '.'
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
- name: 'Terraform Validate'
uses: hashicorp/terraform-github-actions@master
with:
tf_actions_version: 0.12.13
tf_actions_subcommand: 'validate'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: 'Terraform Plan'
uses: hashicorp/terraform-github-actions@master
with:
tf_actions_version: 0.12.13
tf_actions_subcommand: 'plan'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
ЗАМЕЧАНИЕ: В данном примере — использую secrets, которые нужно прописать в настройках самого проекта. Данную настройку можно найти по следующему пути:
<GITHUB_URL>/<YOUR_USER>/<YOUR_REPO_NAME>/settings/secrets
Где:
- <GITHUB_URL> — URL от гитхаба (с http или https).
- <YOUR_USER> — Юзер от которого запушился код.
- <YOUR_REPO_NAME> — Репозиторий.
Например у меня это выглядит так:
https://github.com/SebastianUA/terraform/settings/secrets
Нашел в интернете «runatlantis» проект который позволяет выполнять действия (terraform plan, terraform apply — это как пример) написав команду в комментарии ( например pull request-а). Не проверял работу, но оставил чтобы не забыть про него, если нужно будет заюзать.
Вот и все, статья «Создаем GitHub workflows с actions в Unix/Linux» завершена.