[Git/Gitea] Gitea Actions를 활용한 테스트 코드 실행 자동화 (1)
배경
온프로미스 구축이 용이하다는 점 때문에, Gitea를 도커 컨테이너로 띄워놓고 운영 중이다. Github actions과 유사한 기능을 Gitea에서도 사용할 수 있는데, 환경 구축과 테스트 코드 실행 과정을 정리한다.
환경 구축
1) Gitea Actions 활성화
Gitea 서버가 떠있는 공간에서 설정을 바꿔준다. 기본적으로는 actions 탭이 활성화 돼있지 않다.
# custom/conf or config 디렉토리 내 app.ini 에 추가
[actions]
ENABLED = true
DEFAULT_ACTIONS_URL = https://gitea.com/gitea/act_runner
# 설정 추가 후
systemctl restart gitea
# 혹은
docker restart {gitea_container]
이제 Gitea GUI 환경에서 각 repo 마다 settings Actions 탭을 활성화 할 수 있다. (이 부분 역시 모든 레포에 대해 기본적으로 Actions 탭을 활성화 하도록 환경 셋팅을 바꿀 수 있다고 한다.)
2) 워크플로 파일 작성
자동으로 실행하고 싶은 작업을 생성한다. 레포지토리 루트에 ".gitea/workflow" 디렉토리를 생성 후, ".yml" 확장자로 아래와 같이 추가하면 된다.
mkdir -p .gitea/workflows
# .gitea/workflows/test.yml 생성
name: Test Workflow
on:
push:
branches:
- main
paths:
- 'builder/**'
jobs:
test:
runs-on: self-hosted
steps:
- name: Run tests
run: echo HI
"on"은 트리거를 의미한다. 위 예시는 main branch에 push하는 순간 자동으로 해당 workflow가 실행되도록 설정한 것이며, 외에도 pull_request, schedule(정기 실행), workflow_dispatch(수동 실행), release 등의 옵션이 있다. 또한 paths를 지정한 경우에는, 해당 부분에 변경 사항이 있을 때만 실행되도록 설정한다.
"jobs"는 실제 실행한 동작과 관계된다. "runs-on"의 경우, 해당 동작을 실행할 컨테이너를 띄울 이미지를 설정할 수 있다. 기본값으로는 ubuntu:latest 이미지가 활용되는 것으로 보이며, 커스터마이징도 가능하다. "self-hosted"는 별도 컨테이너를 띄우지 않고 push 등 동작이 발생한 로컬 환경에서 action을 수행하도록 한다. "steps" 하위에 여러 개의 "name"과 "run"을 순차적으로 동작하도록 배치가 가능하다.
3) act_runner 설치 및 설정
Gtiea는 "act_runner"를 통해 사전 정의된 action을 실행하고, 그 결과를 Gitea 서버에 전달해 출력한다. 이 부분은 별도 설치 및 셋팅이 필요하다. 링크에서 OS에 맞는 버전을 선택해 다운로드 받으면 된다.
# 리눅스
wget https://dl.gitea.com/act_runner/0.2.11/act_runner-0.2.11-linux-amd64
# 실행 권한
chmod +x act_runner-0.2.11-linux-amd64
# bin 폴더로 이동
mv act_runner-0.2.11-linux-amd64 /usr/local/bin/act_runner
이렇게 bin 디렉토리로 옮겨 놓으면 편하게 사용이 가능하다. 이제 이 act_runner를 통해 daemon을 직접 실행하거나, 혹은 config를 별도로 작성 후 docker-compose를 통해 act_runner를 실행할 수 있는데, 일단 테스트를 위해 전자로 진행했다.
act_runner register
를 실행하면, interactive하게 기본 설정들을 할 수 있다. (분명 --instance 등의 인자를 줄 수 있게 돼있는데, 줘도 안먹고 다시 입력해야 한다.) gitea 서버 주소, token, tag_name 등을 순차적으로 입력하면 된다. token의 경우 연결하고자 하는 레포지토리의 settings - Actions - runners 탭에서 아래와 같이 찾을 수 있다.
이렇게 하면 등록 절차를 마칠 수 있고, 이제 이 act_runner가 동작할 수 있도록 daemon을 띄워준다.
nohup act_runner daemon &
길뚫을 위해 이렇게 수행하긴 했으나.. 매번 daemon 띄우는 것도 일이고, 이렇게 하면 하나의 서버에서 한 개의 레포지토리에만 act_runner를 연결할 수 있으니, 결국 config 만들고 docker-compose를 실행하는 쪽으로 진행해야 할 것 같다.
act_runner generate-config > config.yaml
이렇게 하면 기본 구조를 갖춘 config.yaml이 생성되고, 여기에 방금 interactive하게 수행한 기본 값들에 대한 셋팅, 그리고 그 외에도 추가적인 기능들과 관련된 셋팅을 수행할 수 있다. 그리고 이 config를 활용해 docker-compose를 수행할 yaml은 아래의 구조로 생성하면 된다.
version: "3"
services:
act_runner:
image: gitea/act_runner:0.2.10
container_name: act_runner
privileged: true
environment:
CONFIG_FILE: /config.yaml
GITEA_INSTANCE_URL: "https://192.168.56.173:3300"
GITEA_RUNNER_REGISTRATION_TOKEN: {token}
GITEA_RUNNER_NAME: "act_runner"
GITEA_RUNNER_LABELS: ubuntu-latest:docker
volumes:
- ~/act-runner/data:/data
- ~/act-runner/cache:/root/.cache
- ./config.yaml:/config.yaml
- /var/run/docker.sock:/var/run/docker.sock
이 부분 셋팅하고 실제 실행은 다음 번에 해본다.
아마 이 구조로 셋팅하고 "docker-compose up -d" 를 실행하면 직접 register하고 daemon을 실행한 것과 동일한 결과를 보여줘야 한다.
아무튼 이렇게 직접 daemon을 잘 실행했다면, main branch에 변경 사항을 push 했을 때 아래와 같이 Actions 탭에서의 수행을 볼 수 있다.
길뚫 성공..!