본문 바로가기
Git-DevOps

Gitea를 이용한 CI 구성

by 간식주인 2024. 8. 23.

요건

 - 제작한 고객사 레포트 애플리케이션을 로컬이 아닌 서버로 구동시키기 위해 Gitea서버와 CI 환경을 구성

 

환경

  • 1 server(ubuntu 22.04 , 2cpu 4GB RAM) + 1 Public IP

Process

  1. 서버 환경 준비
  2. Gitea 설치
  3. Act Runner 설치
  4. 애플리케이션 액세스 토큰을 Secret으로 등록
  5. Gitea Act Runner를 이용한 CI 테스트

 

==================================================================================

1. 서버 환경 준비

이번에는 Kakao Cloud의 서버를 이용하여 진행하였습니다.

2024.08.20 - [Kakao i Cloud] - KaKao Cloud - VM(Server) 생성하기

 

KaKao Cloud - VM(Server) 생성하기

요건 - KaKao Cloud에서 Virtual Machine 서비스를 통해 서버를 생성하고 nginx를 설치 환경1  server(ubuntu 22.04 , 2cpu 4GB RAM) + 1 Public IPProcessKaKao Cloud에서 Virtual Machine 서비스를 통해 서버 생성생성한 서버에

enginnersnack.tistory.com

 

추가로 gitea 서버 접속을 위해 보안 그룹에 3000번 포트를 허용합니다.

 

2. Gitea 설치 및 Act Runner 설치

Gitea 설치를 위해 패키지 레포지토리에서 sqlite3와 git을 설치합니다.

*packagekit.service 재시작 여부 창에서 OK를 선택합니다.

sudo apt update 
sudo apt install sqlite3 -y
sudo apt install git -y

 

git 관리를 위한 시스템 사용자 추가를 진행합니다.

sudo adduser \
   --system \
   --shell /bin/bash \
   --gecos 'Git Version Control' \
   --group \
   --disabled-password \
   --home /home/git \
   git

 

gitea 구동을 위한 바이너리 파일을 다운로드합니다.

*VERSION에 사용되는 버전 값은 https://blog.gitea.com/ 에서 확인 가능합니다.

*2024.08.20 기준 최신 릴리즈는 1.22.1입니다.

VERSION=1.22.1 
sudo wget -O /tmp/gitea https://dl.gitea.io/gitea/${VERSION}/gitea-${VERSION}-linux-amd64
sudo mv /tmp/gitea /usr/local/bin
sudo chmod +x /usr/local/bin/gitea

sudo mkdir -p /var/lib/gitea/{custom,data,log}
sudo chown -R git:git /var/lib/gitea/
sudo chmod -R 750 /var/lib/gitea/
sudo mkdir /etc/gitea
sudo chown root:git /etc/gitea
sudo chmod 770 /etc/gitea

 

gitea를 서비스로 운영하기 위해 systemd 단위 파일을 생성합니다.

sudo wget https://raw.githubusercontent.com/go-gitea/gitea/main/contrib/systemd/gitea.service -P /etc/systemd/system/

sudo systemctl daemon-reload 
sudo systemctl enable --now gitea

 

gitea가 제대로 구동되는지 확인합니다.

systemctl status gitea

 

브라우저에 서버의 공인아이피:3000을 입력하여 gitea에 접속한 후 설정을 변경합니다.

다른 값을 default로 두되, DB 종류만 아까 설치한 sqlite3로 변경합니다.

 

gitea 설치 후 계정 등록을 통해 admin 권한을 가진 계정을 생성합니다.

 

gitea 로그인 후 오른쪽 상단에 + 버튼을 통해 저장소를 생성합니다.

 

레포지토리의 이름을 지정하고 생성합니다.

 

레포지토리 생성을 확인합니다.

 

3. Act Runner 설치

Gitea에는 자체적으로 CI 기능을 제공하지 않기 때문에 GitHub Action과 대부분 호환 가능한 act runner 설치가 필요합니다.

Gitea에서 CI를 구성 하기 위해 Act Runner를 설치합니다.

https://dl.gitea.com/act_runner/ 해당 페이지에서 운영체제에 맞는 바이너리 파일을 다운로드합니다.

mkdir /gitea-runner
cd /gitea-runner
wget https://dl.gitea.com/act_runner/0.2.10/act_runner-0.2.10-linux-amd64
mv act_runner-0.2.10-linux-amd64 act_runner

 

act runner 바이너리 파일을 이용하여 Gitea Runner의 환경 설정 파일을 생성합니다.

chmod +x act_runner
./act_runner generate-config > config.yaml

 

Gitea runner는 Docker 환경으로 구동되기때문에 docker와 docker-compose를 설치합니다.

apt install -y docker.io docker-compose
systemctl start docker
systemctl enable docker

 

Gitea Runner를 실행시키기 위해 Docker Compose 파일을 작성합니다.

작성하기 앞서 Gitea의 Runner 토큰 정보가 필요하기 때문에 발급합니다.

Gitea > 저장소(report-app) > 설정 > Actions > Runners > Create new Runner에서 REGISTRATION TOKEN을 복사합니다.

Docker Compose 파일을 작성합니다.

vi docker-compose.yml
=================================================================================
version: "3.8"

services:
  runner:
    image: gitea/act_runner:latest
    container_name: gitea-act
    environment:
      CONFIG_FILE: /config.yaml
      GITEA_INSTANCE_URL: "http://172.16.3.230:3000" # 실행중인 Gitea URL 예시(도메인 or 서버 아이피)
      GITEA_RUNNER_REGISTRATION_TOKEN: "{REGISTRATION TOKEN}" # 상단에서 발급 받은 토큰
      GITEA_RUNNER_NAME: "report-runner" # Runner에서 사용할 이름
    volumes:
      - /gitea-runner/config.yaml:/config.yaml
      - /gitea-runner/data:/data
      - /var/run/docker.sock:/var/run/docker.sock

 

docker-compose 명령어를 통해 Gitea Runner를 구동합니다.

docker-compose up -d
docker ps

 

다시 Gitea > 설정 > 저장소 에서 하단으로 내려서 Action : Enable Repository Actions가 활성화 되있는것을 확인합니다.

 

 

4. 애플리케이션 액세스 토큰을 Secret으로 등록

이후 Gitea Act Runner에서 Gitea 접근을 위해 액세스 토큰을 발급받아 저장소의 Secret으로 등록해야 합니다.

오른쪽 상단 프로필을 누르고 설정을 클릭합니다.

 

어플리케이션 >  토큰 생성

* Select permissions를 누르고 admin 권한을 Read and Write로 설정합니다.

 

토큰 생성 시 1회만 확인할 수 있으므로 잘 기록해 둡니다.

 

이후 생성한 저장소 > 설정 > Actions > Secrets 로 이동하여 액세스 토큰을 Secret으로 등록합니다.

 

 

5. Gitea Act Runner를 이용한 CI 테스트

로컬에서 테스트를 위한 python file을 작성합니다.

dummy_report.py
================================================================
if __name__ == "__main__":
    f = open("dummy_report.txt", 'w')
    f.write("[고객사 레포트]")
    f.close()

 

동일한 위치에 .gitea/workflows  폴더를 만들고 act runner를 통해 실행할 스크립트를 작성합니다.

ci.yaml
================================================================
name: generate dummy report
run-name: ${{ gitea.actor }} is generate dummy report 🚀
on:
  push:
    branches:
      - main  # main 브랜치에 푸시된 경우에만 실행
    tags-ignore:  # 태그 푸시는 무시
      - '*'

jobs:
  generate-report:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout report-app repository
      uses: actions/checkout@v3

    - name: Set up Python
      uses: actions/setup-python@v2
      with:
        python-version: '3.8.x'          

    - name: Run report generation script
      run: |
        python dummy_report.py

    - name: Create a temporary directory for the report
      run: |
        zip -r report.zip dummy_report.txt

    # https://gitea.com/actions/gitea-release-action 
    # 사용자 정의 액션 사용
    - name: Create Gitea Release and Upload File
      uses: akkuman/gitea-release-action@v1
      env:
        GITHUB_TOKEN: ${{ secrets.MASTERTOKEN }}
        NODE_TLS_REJECT_UNAUTHORIZED: false
      with:
        tag_name: v0.0.${{ github.run_number }}  # 푸시된 태그를 릴리스 태그로 사용
        name: Customer Update - Test Push v0.0.${{ github.run_number }}  # 릴리스 이름도 태그 이름으로
        files: |-
          ./report.zip

 

생성한 저장소에 코드를 Push 합니다.

*push 시 gitea 계정과 비밀번호를 입력합니다.(vscode 기준 중앙 상단에 입력하는 창이 뜹니다.)

git init
git checkout -b main
git remote add origin http://210.109.62.243:3000/biokim/report-app.git
git add .
git commit -m "first commit"
git push origin main

 

gitea에서 Actions를 확인하여 CI가 동작하는지 확인합니다.

 

릴리즈 탭으로 이동하여 act runner를 통해 릴리즈된 report 파일을 다운로드 하고 내용을 확인합니다.

*http로 구성되어 있으므로 크롬 브라우저에서는 우측 상단에 "계속"을 눌러 다운로드를 진행해야 합니다.

 

다운로드 받은 파일을 확인하여 txt 파일의 내용을 확인합니다.

 

 

[여담]

실제로 고객사별 레포트에 공수가 많이 들어가서 개인 프로젝트로 월간 레포트 자동화 애플리케이션을 개발하였습니다.

CD까지는 필요 없을듯 하여 CI만 구성하였고 Gitlab보다는 가볍게 돌릴 수 있는 Gitea가 좋을 것 같아 Gitea + Act Runner로 CI를 구성하였습니다.

현재 개발한 애플리케이션을 CI를 통해 월마다 레포트를 릴리즈 하여 각 사용자들이 볼 수 있게 구성해 놓았습니다.

독자분들도 Gitea CI를 이용해 업무 공수를 줄여나가셨으면 좋겠습니다.