Files
rkm-conectasus-ci-sandbox/.gitea/runner/README.md
Antonio Lopes dos Santos afec302c3e
All checks were successful
build-api-image / build (push) Successful in 51s
init commit
2026-08-04 16:52:02 -03:00

107 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Runner do Gitea (act_runner)
Runner que executa a esteira [`build-api-image.yml`](../workflows/build-api-image.yml).
Sobe em um servidor **separado** do Gitea — o Gitea fica em `192.168.0.41:3001`
e este compose roda na máquina que vai construir as imagens.
## Instalação
```bash
cp .env.example .env
```
Pegue o token de registro no Gitea e cole em `GITEA_RUNNER_REGISTRATION_TOKEN`:
| Escopo do runner | Onde pegar o token |
| --- | --- |
| Só o repositório conectasus | Repo › Settings › Actions › Runners › Create new runner |
| Toda a organização `rkm` | Org › Settings › Actions › Runners |
| Instância inteira | Site Administration › Actions › Runners |
Depois:
```bash
docker compose up -d
docker compose logs -f
```
O runner aparece como online em Settings › Actions › Runners do Gitea. O token de
registro é usado uma única vez; a credencial permanente fica em `./data/.runner`.
## O que o compose faz
| Item | Motivo |
| --- | --- |
| `/var/run/docker.sock` montado | O `act_runner` usa o daemon do host para criar os containers de job **e** repassa o socket para dentro deles. É isso que faz o `docker build` da esteira funcionar. |
| `./data` | Guarda o registro do runner. Apagar essa pasta força novo registro. |
| Label `ubuntu-latest:docker://gitea/runner-images:ubuntu-latest` | Casa com o `runs-on: ubuntu-latest` do workflow. Essa imagem (0,57 GB) já traz `docker`, `git`, `node`, `bash` e `curl` — tudo que a esteira usa. A variante `-full` tem 17,6 GB e não é necessária. |
Como o Gitea está em outro servidor, tudo que aponta para ele é configuração:
`GITEA_INSTANCE_URL` e o token vêm do `.env`, nada fixo no compose. Se as
variáveis obrigatórias faltarem, o `docker compose up` falha na hora com a
mensagem em vez de subir um runner quebrado.
## Pré-requisitos no servidor do runner
**1. Alcançar o Gitea.** O runner e os containers de job precisam falar com
`192.168.0.41:3001` (API do Actions e registry de imagens):
```bash
curl -s http://192.168.0.41:3001/api/v1/version
```
**2. Confiar no registry via HTTP.** O registry não tem TLS, e o `docker push` da
esteira roda no daemon do host (por causa do socket montado). Então a
configuração é do host, não do compose — em `/etc/docker/daemon.json`:
```json
{ "insecure-registries": ["192.168.0.41:3001"] }
```
Se o arquivo já existir, **acrescente ao array** em vez de sobrescrever. Depois:
```bash
systemctl reload docker
docker info | grep -A5 'Insecure Registries'
```
Use `reload`, não `restart`. `insecure-registries` é recarregável por SIGHUP, e
`restart` derruba todos os containers do host quando `live-restore` está
desligado (confira com `docker info --format '{{.LiveRestoreEnabled}}'`).
Sem isso o push falha com `http: server gave HTTP response to HTTPS client`.
**3. Espaço em disco.** Cada build gera uma imagem da API com o `vendor/`
completo. Convém uma limpeza periódica:
```bash
docker image prune -af --filter "until=168h"
```
## Mudando o runner de máquina
O compose não tem nada preso à máquina: o Gitea é alcançado por
`GITEA_INSTANCE_URL`, que vem do `.env`. Para mover o runner basta subir o
compose no servidor novo e registrar de novo.
Na fase inicial de desenvolvimento é natural rodar na própria máquina de dev.
Duas ressalvas quando esse host também roda outros containers:
- Um `restart` do daemon Docker (necessário se você usar `restart` em vez de
`reload` para o `insecure-registries`) derruba tudo que estiver no host.
- Os builds competem por disco e CPU com os containers já existentes.
Ao migrar para o servidor do Gitea, o registro anterior deve ser removido em
Settings › Actions › Runners, e a pasta `./data` do host antigo descartada.
`GITEA_INSTANCE_URL` pode continuar apontando para o IP — não precisa virar
`localhost`.
## Notas
- Se o Gitea for acessado por hostname em vez de IP e o servidor do runner não
resolver esse nome, acrescente `extra_hosts` ao serviço no compose.
- Por padrão o runner executa **um job por vez**. Para paralelismo, monte um
`config.yaml` com `runner.capacity` e aponte `CONFIG_FILE` para ele.
- O socket do Docker montado dá ao runner controle total sobre o daemon do host.
Use um servidor dedicado a CI, não um que rode containers de produção.