CI/CD 파이프라인을 만들기 위한 첫 단계로, Git 서버를 구축하였다. 기존에는 사내망 Gitlab을 사용했었는데 해당 서버는 연구소에서 빌려서 사용을 했기 때문에 서버 방화벽 관리나 여타 작업들에 지장이 많았다. 때문에 조용히 형상관리를 하는 선에 그쳤었고, 이번에 팀 내부에서 사용할만한 git서버를 자체적으로 구축하는 것을 목표로 하였다.
1. Git서버 선택
Git서버를 구축할 수 있는 방법에는 GitLab, Azure, bitbucket, Gitea등 여러가지 선택지가 있다. 나는 그 중에서 Gitea를 선택했다.
Gitea를 선택한 이유는 다음과 같다.
- 설치가 매우 간단 (바이너리 하나로 실행 가능)
- 리소스 소모가 적음 (CPU 2core, RAM 2GB 정도면 충)
- UI가 깔끔하고 직관적
- 소규모 팀 또는 경량 환경에 최적
다수의 프로젝트를 관리하는 것이 아니라 하나의 레포지토리만 운영할 것이기 때문에 최대한 가볍고 쉽게 구축하는 것이 좋았다. 그리고 무엇보다 구동할 서버의 OS가 Windows 였기 때문에 가장 익숙한 Gitlab을 사용할 수가 없었다. Azure의 경우 이전에 TFS를 잠깐 써본적이 있는데 UI가 너무 불편하고 레퍼런스를 찾는 것이 힘들었던 경험이 있었다. 이에 반해 Gitea는 직관적이고 CI/CD를 만들기위한 필요 조건들이 모두 만족되었기 때문에 Gitea를 선택하였다.
https://docs.gitea.com/next/installation/comparison
Compared to other Git hosting | Gitea Documentation
To help decide if Gitea is suited for your needs, here is how it compares to other Git self hosted options.
docs.gitea.com
[Gitea에서 제공하는 비교표]
2. Gitea서버 구축
https://github.com/go-gitea/gitea/releases 링크에서 파일을 다운로드할 수 있다.
Windows서버에서 사용할 것이기 때문에 gitea-1.25.3-windows-4.0-amd64.exe 를 찾아 다운로드 받았다.
다운로드 받은 실행파일을 실행만 해주면 서버 호스팅이 끝이난다.

서버가 올라온걸 확인하면 브라우저에서 호스팅 url에 접속한다. 실제 서버에 올렸을 땐 서버 컴퓨터가 아닌 로컬pc에서 접속을 했는데, 지금은 기록용이라 그냥 호스팅한 pc에서 그대로 접속했다.(상관x)

브라우저에서 접속하면 위처럼 설정페이지가 나온다. 추가 설정이 딱히 필요하지 않아 제목만 수정하고 설정을 완료해주었다.

3. Gitea서버 설정
Gitea의 Configuration은 app.ini에 저장된다.( /custom/conf/ )

gitea 웹페이지 뿐만 아니라 app.ini에서 UI, CORS, 정책, 보안, 로그 등 운영에 필요한 다양한 설정을 할 수 있다.
Gitea에서 제공하는 문서에서 항목들을 보고 필요한 것들만 설정하면 된다.
https://docs.gitea.com/next/category/administration
Administration | Gitea Documentation
📄️ External renderers Gitea supports custom file renderings (i.e., Jupyter notebooks, asciidoc, etc.) through external binaries,
docs.gitea.com
4. Gitea runner 설정
Gitea runner는 Gitea Actions(내장 CI/CD 시스템)에서 실제로 빌드나 배포 명령을 실행하는 프로그램이다. Gitlab의 job runner와 같 역할을 한다. (현재 act_runner로 명칭이 변경되었다.)
runner는 따로 설치를 해줘야 한다. https://dl.gitea.com/act_runner/ 에서 원하는 버전을 선택해 운영체제에 맞게 다운로드 할 수 있으며 Gitea와 마찬가지로 단일 실행파일로 구성되어 있다.
cmd나 powershell에서 아래 명령어를 입력하면 runner가 등록된다.
act_runner.exe register --instance {주소} --token {토큰}
*주소에는 localhost나 127.0.0.1과 같은 루프백 주소를 사용하는 것은 권장되지는 않는다.
*토큰은 Gitea ui에서 확인이 가능하다. Repository - Settings - Actions(Runners) 에서 Create new Runner를 누르면 등록용 토큰을 볼 수 있다.
등록이 완료되면 runner가 있는 폴더에서 .runner파일이 생성되는 것을 확인할 수 있다.
여기서 아래 명령어를 입력하여 config.yaml 파일을 생성해주자.
./act_runner generate-config
./act_runner generate-config > config.yaml


다시 명령창에서 아래명령어를 실행하면 runner가 대기상태 활성화 된다.
act_runner.exe daemon

runner가 등록된 것을 확인하면 레포지토리에 .gitea\workflows\build.yml 파일을 추가한다.
// build.yaml
name: Gitea Actions Demo
run-name: ${{ gitea.actor }} is testing out Gitea Actions 🚀
on: [push]
jobs:
Explore-Gitea-Actions:
runs-on: ubuntu-latest
steps:
- run: echo "🎉 The job was automatically triggered by a ${{ gitea.event_name }} event."
- run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by Gitea!"
- run: echo "🔎 The name of your branch is ${{ gitea.ref }} and your repository is ${{ gitea.repository }}."
- name: Check out repository code
uses: actions/checkout@v4
- run: echo "💡 The ${{ gitea.repository }} repository has been cloned to the runner."
- run: echo "🖥️ The workflow is now ready to test your code on the runner."
- name: List files in the repository
run: |
ls ${{ gitea.workspace }}
- run: echo "🍏 This job's status is ${{ job.status }}."
act_runner 공식 docs에 나와있는 example을 가져와 보았다.
* label이 runner와 일치하지 않으면 waiting상태에서 진행이 되지않으니 주의
이후 등록된 레포지토리에서 push를 하게 되면 위 steps과정이 진행되면서 act_runner 설정까지 완료할 수 있다.

5. 참고
회사에서 서로다른 PC에 Gitea와 act_runner를 호스팅 했을 때는 별다른 문제가 없었는데, 집에있는 노트북 하나의 머신에서 gitea와 act_runner를 windows에서 바로 호스팅하니 runner의 Set up job이 정상적으로 수행되지 않았다. issue도 남겨보고 포럼에 글도 써봤으나 아직 정확한 원인는 알 수가 없으니 주의하길 바라며 가능하다면 gitea서버를 docker에 호스팅하는 것이 좋을 것 같다.
공식문서에서도 gitea와 act_runner를 동일 머신에서 사용하는것을 추천하지 않는다고 명시하기도 했으니 참고.
'Git' 카테고리의 다른 글
| Gitlab(폐쇄망) CI/CD로 .net core 프로젝트 배포 자동화 만들기 (0) | 2024.11.25 |
|---|---|
| [Git] git merge로 브랜치 병합하기 (8) (0) | 2023.12.02 |
| [Git] git branch 개념과 사용법(7) (1) | 2023.12.01 |
| [Git] git stash로 Working Directory 정리하기 (6) (0) | 2023.11.30 |
| [Git] git revert, git reset 으로 커밋 되돌리기 (5) (0) | 2023.11.29 |