Git

[Gitea] Gitea를 통한 CI 파이프라인 구축 (with Nexus)

테런 2024. 6. 14. 15:28
Overview

 

Prerequisite

 

Action Runner 생성
// Create Actions Runner Config
// act_runner 버전은 현재 기준으로 0.2.10이 최신입니다.
$ docker run --entrypoint="" --rm -it gitea/act_runner:0.2.10 act_runner generate-config > config.yaml
// Create Actions Runner
// ${INSTANCE_URL} = http://xx.xx.xx.xx:3000/
// ${REGISTRATION_TOKEN} = Gitea > 설정 > Actions > Runners > Create new Runner > Token 확인
// ${RUNNER_NAME} = 이름 설정
// ${RUNNER_LABELS} = 라벨 설정
$ vi runner-compose.yaml
version: "3.8"
services:
  runner:
    image: gitea/act_runner:0.2.10
    environment:
      CONFIG_FILE: /config.yaml
      GITEA_INSTANCE_URL: "${INSTANCE_URL}"
      GITEA_RUNNER_REGISTRATION_TOKEN: "${REGISTRATION_TOKEN}"
      GITEA_RUNNER_NAME: "${RUNNER_NAME}"
      GITEA_RUNNER_LABELS: "${RUNNER_LABELS}"
    volumes:
      - ./config.yaml:/config.yaml
      - ./data:/data
      - /var/run/docker.sock:/var/run/docker.sock

$ docker-compose -f runner-compose.yaml up -d

// Container 이미지 중 gitea/act_runner:0.2.10이 실행되어있는 것을 확인
$ docker ps


Gitea UI에서 그림과 같이 나온다면 성공적으로 Runner를 생성한 것 입니다.

 

테스트 애플리케이션
// 테스트할 간단한 Spring Boot 코드
$ git clone https://github.com/hyunkwanko/demo.git

// .git 파일 제거
$ cd demo && rm -rf .git

// Gitea 저장소 생성 후 Push
// Branch는 Master로 해주세요.

 

Nexus 계정 등록

Gitea > Settings > Actions > Secrets

 

Secret 키 생성

 

// Secret 키 등록 (Nexus 계정)
USERID, PASSWORD 등록

 

Gitea CI
// demo 애플리케이션 진입
$ cd demo

// Action Runner는 .gitea 디렉토리를 바라보고 있다.
$ mkdir -p ./.gitea/workflows && cd ./.gitea/workflows

// CI 파이프라인 구축
$ vi gitea-ci.yaml
name: Build And Test
run-name: ${{ gitea.actor }} is runs ci pipeline
on:
  push:
    branches:
      - master

jobs:
  Gitea-Docker-Build-Push:
    runs-on: ubuntu-22.04
    steps:
      - name: Check out repository code
        uses: actions/checkout@v3
      - name: Login to Nexus
        run: |
          docker login nexus-docker.{Public IP}.sslip.io \
          -u ${{ secrets.USERID }} \
          -p ${{ secrets.PASSWORD }}
      - name: Build and push
        uses: docker/build-push-action@v5
        with:
          context: .
          file: ./Dockerfile
          platforms: linux/amd64
          push: true
          tags: nexus-docker.{Public IP}.sslip.io/demo:1.0.${{ gitea.run_number }}

$ git push 후 완료

// CI 파이프라인은 다음과 같습니다.
1. Git의 master 브랜치에 push 하는것이 트리거가 되어 Action Runner가 동작을 시작합니다.
2. Check out repository code
3. Login to Docker
4. Build and push (Nexus)

Gitea > Actions 탭 확인

 

Nexus에 Docker Image 저장 확인

 

마무리
Gitea와 Nexus를 통한 CI 파이프라인 구축을 진행하였습니다. ArgoCD를 통한 CD 파이프라인 구축은 [Kubernetes] Gitea와 ArgoCD를 통한 CD 파이프라인 구축에서 확인해주시길 바랍니다. 감사합니다.