Skip to content

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]
  1. create-tag-and-release: lê a versão de .tool-versions, cria tag Git vX.Y.Z e GitHub Release
  2. build-and-publish: builda a imagem Docker com o RUNNER_VERSION como build arg e pusha para OCIR

Para instruções detalhadas do processo de atualização, veja Atualização de Runners.