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

117 lines
3.5 KiB
Markdown

## 1. 개요
기존 젠킨스(Jenkins)는 자바 기반으로 메모리 점유율이 높아 저사양 서버에서 구동이 힘들었음. 이를 해결하기 위해 Go 언어 기반의 초경량 CI 도구인 **Woodpecker**를 도입하고, 도커(Docker) 기반으로 환경을 재구축함.
---
## 2. 환경 정화 및 도커 설치
무거운 자바를 삭제하고 현대적인 컨테이너 환경을 준비함.
```bash
# 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 ID**와 **Client Secret** 발급 및 보관
---
## 4. 우드패커 서버 및 에이전트 배포
`docker-compose`를 사용하여 서버(두뇌)와 에이전트(일꾼)를 동시에 띄움.
**파일 위치:** `~/woodpecker/docker-compose.yaml`
```bash
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
```
```bash
# 실행 및 상태 확인
docker compose up -d
docker ps
```
## 5. 파이프라인 설정 (`.woodpecker.yml`)
저장소 최상단에 작업 지시서를 작성하여 자동화를 테스트함.
**주요 해결 과제:**
- **Git 명령 인식:** 기본 `alpine` 이미지에는 git이 없으므로 `alpine/git` 이미지를 사용하여 해결.
- **이력 확인(HEAD^):** 기본 clone은 depth가 1이라 이전 이력이 없음. `depth: 2` 설정을 통해 최적화된 상태로 이전 커밋과 비교 가능하게 함.
```bash
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 네트워크 방화벽 규칙 추가로 해결.