GitHub Actions Runners¶
Introdução¶
A plataforma utiliza dois tipos de self-hosted runners para executar os pipelines do GitHub Actions. Cada tipo é otimizado para um caso de uso específico:
- Runner de Infraestrutura (
oci-github-runner): para pipelines de infraestrutura (Terraform/Terragrunt) - Runner de Aplicações (
oke-github-actions-runner): para pipelines de build e deploy de aplicações
Comparativo¶
| Aspecto | Runner de Infraestrutura | Runner de Aplicações |
|---|---|---|
| Repositório | oci-github-runner | oke-github-actions-runner |
| Plataforma | OCI Container Instances (serverless) | OKE / Kubernetes (ARC) |
| Imagem base | myoung34/github-runner (community) |
ghcr.io/actions/actions-runner (oficial GitHub) |
| Versão atual | 2.333.0 | 2.333.0 |
| Caso de uso | Terraform, Terragrunt, Terramate | Build Docker, push OCIR, deploy K8s |
| Segurança | Execução como root | Execução como runner (non-root) |
| Vault | Integração OCI Vault (pre-entrypoint.sh) | Sem integração direta |
Runner de Infraestrutura — oci-github-runner¶
Visão Geral¶
Baseado na imagem community myoung34/github-runner, com adição de OCI CLI e Ansible. É executado como OCI Container Instance (serverless).
Ferramentas Instaladas¶
| Ferramenta | Fonte |
|---|---|
| OCI CLI | pip3 install oci-cli |
| Ansible | PPA oficial + apt |
| Docker, docker-compose | Herdado da imagem base |
| Git, curl, wget, jq | Herdado da imagem base |
| Python3 + pip | Herdado da imagem base |
Integração OCI Vault¶
O pre-entrypoint.sh resolve o token do GitHub automaticamente:
```bash
Fluxo do pre-entrypoint.sh:¶
1. Verifica se OCI_CLI_AUTH está configurado¶
2. Busca o token do GitHub no OCI Vault via SECRET_ID¶
3. Decodifica base64 e exporta como ACCESS_TOKEN¶
4. Executa o entrypoint original do runner¶
```
Isso elimina a necessidade de armazenar o token diretamente na configuração da Container Instance — o token fica seguro no OCI Vault.
Makefile¶
bash
make build # Build da imagem Docker
make push # Push para GHCR
make build-push # Build + Push
Runner de Aplicações — oke-github-actions-runner¶
Visão Geral¶
Baseado na imagem oficial do GitHub actions/actions-runner, com ferramentas adicionais para build e deploy. Executa como pod no Kubernetes via Actions Runner Controller (ARC).
Ferramentas Instaladas¶
| Ferramenta | Fonte |
|---|---|
| Docker CLI + Buildx | Repositório APT Docker |
| docker-compose plugin | Repositório APT Docker |
| kubectl | Binário oficial (versão stable mais recente) |
| Helm | Script oficial get-helm-3 |
| OCI CLI | pip3 install oci-cli |
| yq | Binário do GitHub Releases |
| jq | APT |
| Python3 + pip + venv | APT |
| gcc, g++, unzip | APT |
Segurança¶
- Executa como
USER runner(non-root) - Healthcheck integrado:
pgrep -x "Runner.Listener"a cada 30s - Diretórios de trabalho com permissões restritas
Política N-2 do GitHub¶
Política de versão obrigatória
O GitHub exige que self-hosted runners estejam dentro de 2 versões minor da versão mais recente. Se o runner ficar 3 ou mais versões atrás, ele para de aceitar jobs.
Exemplo: Se a versão mais recente é 2.335.0, o runner deve estar em 2.333.0 ou superior.
Check Automático¶
Ambos os repositórios possuem um workflow de verificação diária que roda às 4:00 UTC:
flowchart TD
CRON[Daily 4:00 UTC] --> CHECK[Verifica versão mais recente]
CHECK --> COMPARE{Versão nova?}
COMPARE -->|Sim| BRANCH[Cria branch update-runner-X.Y.Z]
BRANCH --> UPDATE[Atualiza .tool-versions]
UPDATE --> PR[Abre PR para main]
PR --> REVIEW[Aguarda review/merge]
COMPARE -->|Não| SKIP[Nada a fazer]
| Workflow | Fonte de versão verificada |
|---|---|
check-runner-version.yml (oci-github-runner) |
Tags de myoung34/docker-github-actions-runner |
check-actions-runner.yml (oke-github-actions-runner) |
Releases de actions/runner |
Pipeline de Atualização¶
Quando o PR de atualização é mergeado:
flowchart LR
MERGE[PR merged] -->|.tool-versions modificado| TAG[create-tag-and-release.yml]
TAG -->|Cria tag + Release| BUILD[build-and-publish.yml]
BUILD -->|Build Docker image| PUSH[Push para OCIR]
- create-tag-and-release: lê a versão de
.tool-versions, cria tag GitvX.Y.Ze GitHub Release - build-and-publish: builda a imagem Docker com o
RUNNER_VERSIONcomo build arg e pusha para OCIR
Para instruções detalhadas do processo de atualização, veja Atualização de Runners.