kui-vault/01.Shelf/KUI/04. Woodpecker 설치.md

3.5 KiB

1. 개요

기존 젠킨스(Jenkins)는 자바 기반으로 메모리 점유율이 높아 저사양 서버에서 구동이 힘들었음. 이를 해결하기 위해 Go 언어 기반의 초경량 CI 도구인 Woodpecker를 도입하고, 도커(Docker) 기반으로 환경을 재구축함.


2. 환경 정화 및 도커 설치

무거운 자바를 삭제하고 현대적인 컨테이너 환경을 준비함.

# OpenJDK 삭제 및 정리
sudo apt purge -y openjdk-17-jre openjdk-17-jre-headless
sudo apt autoremove -y

# 도커(Docker) 설치
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

# 현재 사용자에게 도커 권한 부여
sudo usermod -aG docker $USER
newgrp docker # 로그아웃 없이 권한 즉시 적용

3. GitHub OAuth 앱 등록

우드패커가 GitHub 저장소에 접근할 수 있도록 통행증을 발급함.

  1. GitHub Settings > Developer settings > OAuth Apps 이동

  2. New OAuth App 생성

    • Homepage URL: http://34.19.79.94:8000

    • Authorization callback URL: http://34.19.79.94:8000/authorize

  3. Client IDClient Secret 발급 및 보관


4. 우드패커 서버 및 에이전트 배포

docker-compose를 사용하여 서버(두뇌)와 에이전트(일꾼)를 동시에 띄움.

파일 위치: ~/woodpecker/docker-compose.yaml

services:
  woodpecker-server:
    image: woodpeckerci/woodpecker-server:latest
    ports:
      - 8000:8000
    volumes:
      - ./woodpecker-server:/var/lib/woodpecker
    environment:
      - WOODPECKER_OPEN=true
      - WOODPECKER_HOST=http://34.19.79.94:8000
      - WOODPECKER_AGENT_SECRET=wp_secure_9827_vpx_qr # 보안을 위해 이니셜 제외
      - WOODPECKER_GITHUB=true
      - WOODPECKER_GITHUB_CLIENT=발급받은_ID
      - WOODPECKER_GITHUB_SECRET=발급받은_Secret

  woodpecker-agent:
    image: woodpeckerci/woodpecker-agent:latest
    command: agent
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - WOODPECKER_SERVER=woodpecker-server:9000
      - WOODPECKER_AGENT_SECRET=wp_secure_9827_vpx_qr
# 실행 및 상태 확인
docker compose up -d
docker ps

5. 파이프라인 설정 (.woodpecker.yml)

저장소 최상단에 작업 지시서를 작성하여 자동화를 테스트함.

주요 해결 과제:

  • Git 명령 인식: 기본 alpine 이미지에는 git이 없으므로 alpine/git 이미지를 사용하여 해결.

  • 이력 확인(HEAD^): 기본 clone은 depth가 1이라 이전 이력이 없음. depth: 2 설정을 통해 최적화된 상태로 이전 커밋과 비교 가능하게 함.

kind: pipeline
name: check-updates

clone:
  setup:
    image: woodpeckerci/plugin-git
    settings:
      depth: 2

steps:
  - name: show-changes
    image: alpine/git
    commands:
      - echo "새로운 업데이트가 감지되었습니다!"
      - echo "수정된 파일 목록:"
      - git diff --name-only HEAD^ HEAD
      - echo "최근 커밋 메시지:"
      - git log -1 --pretty=%B

6. 트러블슈팅 기록

  • Forge Not Configured: GitHub OAuth 설정이 누락되어 서버가 실행 직후 종료됨 -> 환경 변수 추가로 해결.

  • Agent Auth Error: 서버 데이터베이스와 에이전트의 Secret Key가 꼬임 -> 서버 볼륨 삭제 후 재시작으로 초기화 성공.

  • GCP 방화벽: 8000번 포트가 막혀 접속 불가 -> VPC 네트워크 방화벽 규칙 추가로 해결.