gitea-actions-templates
Reusable workflow-шаблоны для Gitea Actions. Покрывают полный CI/CD цикл: сборка образа, миграции БД, деплой в Kubernetes.
Быстрый старт
Для типового сервиса достаточно трёх строк — все параметры вычисляются автоматически из контекста репозитория:
jobs:
build:
uses: devops/gitea-actions-templates/.gitea/workflows/docker-build-and-push.yaml@develop
migration:
needs: build
uses: devops/gitea-actions-templates/.gitea/workflows/prisma-migrate.yaml@develop
deploy:
needs: [migration, build]
uses: devops/gitea-actions-templates/.gitea/workflows/k8s-deploy.yml@develop
Полный рабочий пример: base-cicd-example.yml
Динамически вычисляемые параметры
Следующие значения выводятся автоматически и не требуют явного указания:
| Параметр | Источник | Пример |
|---|---|---|
APP_NAME |
Имя репозитория | my-service |
VAULT_ROLE |
<org_lowercase>-vso-role |
infra-vso-role |
PROD_NAMESPACE |
<org_lowercase> |
infra |
DEV_NAMESPACE |
<org_lowercase>-dev |
infra-dev |
PROD_KUBECONF_SECRET_PATH |
kv/data/ci-runners/jobs/deploy/kubeconfigs <org_lowercase>-prod |
...kubeconfigs infra-prod |
DEV_KUBECONF_SECRET_PATH |
kv/data/ci-runners/jobs/deploy/kubeconfigs <org_lowercase>-dev |
...kubeconfigs infra-dev |
PROD_PRISMA_SECRET_DB_PATH |
kv/data/ci-runners/jobs/migrate/<org_lowercase>/<APP_NAME> prod |
...migrate/infra/my-service prod |
DEV_PRISMA_SECRET_DB_PATH |
kv/data/ci-runners/jobs/migrate/<org_lowercase>/<APP_NAME> dev |
...migrate/infra/my-service dev |
<org_lowercase>— владелец репозитория в Gitea в нижнем регистре (напримерINFRA→infra).
Модули
docker-build-and-push.yaml — сборка и публикация Docker-образа
Собирает образ через Kaniko и пушит в registry. Секреты получает из Vault через Kubernetes auth.
Опциональные inputs (все имеют defaults):
| Input | Default | Описание |
|---|---|---|
APP_NAME |
имя репозитория | Имя образа и Helm-release |
REGISTRY |
registry.project-quest-dev.com |
Target registry |
DOCKERFILE_PATH |
Dockerfile |
Путь к Dockerfile |
REGISTRY_USER |
registry-bot |
Пользователь в registry |
VAULT_URL |
https://vault.project-quest-dev.com |
URL Vault |
VAULT_K8S_AUTH_PATH |
kubernetes-prod-infra |
Mount path k8s auth backend |
k8s-deploy.yml — деплой Helm-чарта в Kubernetes
Разворачивает чарт из директории ./chart. Определяет среду (prod/dev) по ветке: main → prod, остальные → dev.
Опциональные inputs (все имеют defaults):
| Input | Default | Описание |
|---|---|---|
APP_NAME |
имя репозитория | Имя Helm-release |
REGISTRY |
registry.project-quest-dev.com |
Registry образа |
REGISTRY_USER |
registry-bot |
Пользователь в registry |
PROD_NAMESPACE |
<org_lowercase> |
Kubernetes namespace для prod |
DEV_NAMESPACE |
<org_lowercase>-dev |
Kubernetes namespace для dev |
PROD_VALUES_FILE |
chart/values-prod.yaml |
Values-файл для prod |
DEV_VALUES_FILE |
chart/values-dev.yaml |
Values-файл для dev |
PROD_KUBECONF_SECRET_PATH |
вычисляется | Vault-путь к kubeconfig prod |
DEV_KUBECONF_SECRET_PATH |
вычисляется | Vault-путь к kubeconfig dev |
HELM_VERSION |
3.20.0 |
Версия Helm |
CUSTOM_HELM_SET |
"" |
Дополнительные --set аргументы (поддерживает envsubst) |
VAULT_URL |
https://vault.project-quest-dev.com |
URL Vault |
VAULT_K8S_AUTH_PATH |
kubernetes-prod-infra |
Mount path k8s auth backend |
prisma-migrate.yaml — Prisma-миграции
Применяет pending-миграции через prisma migrate deploy. Среда определяется по ветке: main → prod, остальные → dev.
Опциональные inputs (все имеют defaults):
| Input | Default | Описание |
|---|---|---|
APP_NAME |
имя репозитория | Используется для построения Vault-пути |
PROD_PRISMA_SECRET_DB_PATH |
вычисляется | Vault-путь к DATABASE_URL для prod |
DEV_PRISMA_SECRET_DB_PATH |
вычисляется | Vault-путь к DATABASE_URL для dev |
VAULT_URL |
https://vault.project-quest-dev.com |
URL Vault |
VAULT_K8S_AUTH_PATH |
kubernetes-prod-infra |
Mount path k8s auth backend |
Переопределение параметров
Любой вычисляемый параметр можно переопределить явно через with::
jobs:
deploy:
uses: devops/gitea-actions-templates/.gitea/workflows/k8s-deploy.yml@develop
with:
PROD_NAMESPACE: my-custom-namespace
CUSTOM_HELM_SET: "--set ingress.host=my-app.example.com"