IT 역량/Git, Github

[Git/Gitea] Gitea Actions를 활용한 테스트 코드 실행 자동화 (1)

mingchin 2024. 11. 14. 10:36
728x90
반응형

배경

온프로미스 구축이 용이하다는 점 때문에, 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 탭에서의 수행을 볼 수 있다.

길뚫 성공..!

728x90
반응형