## 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 네트워크 방화벽 규칙 추가로 해결.