본문 바로가기
프로젝트 (Project)

[Woodpecker] Secure & Open-source CI/CD tool 구축

by moveho 2023. 4. 11.

open source - woodpecker

# woodpecker VS Other CI System

Woodpecker 매우 간단한 UI 가지고 있습니다. 정말 쉽게 진행상황을 빌드하고 보여줍니다.

Build pipeline 도커 기반으로 하여 거의 모든 종류의 소프트웨어나 도구를 로컬에서 테스트할 있는 장점이 있습니다. 또한 AWS CLI 이미지를 사용해 모든 API 사용할 있습니다.

그리고 ram 소비 공간 또한 Jenkins 보다 훨씬 작습니다.

 

중요한 이점을 정리해보자면 다음과 같습니다.

1.      Open-Source 입니다. 언제든지 빌드 테스트를 비용 걱정없이 있습니다

2.      맞춤형 빌드 하드웨어 입니다. 필요에 따라 파이프라인을 구축할 하드웨어를 선택할 있습

니다. 필요한 만큼 빌드 에이전트를 실행하고 빌드를 병렬화할 있습니다.

3.      자체 호스팅 되기 떄문에 완전한 자율성과 호환성을 갖추고 있습니다. Github 조금 다른데

서비스와 절대 공유되지 않는 코드 베이스를 갖추고 있습니다.

 

 

# VPS 서버에 Woodpecker 설치하기

Woodpecker CI 호스트 하려면 SSH 액세스 공용 IP 있는 VPS 사용해야 합니다. 빌드 서버를 프로비저닝 하기 위한 필요한 모든 소프트웨어를 빠르게 설정 가능하고 모든 소프트웨어로 서버 상태를 빠르게 복구할 있는 기능을 제공하는 Docker 사용합니다.

 

AWS EC2 t2.micro 인스턴스를 사용합니다. AWS EC2 말고 다른 인스턴스를 사용해도 괜찮습니다.

 

1.  AWS 접속해서 본인의 Region 선택합니다. 저는 ap-northeast2 사용했습니다.

2.  EC2 -> 인스턴스 시작을 클릭

3.  스타트에서 Ubuntu 선택

4. 인스턴스 유형은 t2.micro 선택 key pair 단계에서 새로운 페어를 생성해 줍니다

5.  페어 생성 버튼을 눌러 줍니다

저는 putty 사용하여 연결 것이기 때문에 ppk키로 발급 받았습니다.

 

6.  HTTPS, HTTP 트래픽 허용도 눌러줍니다.

 

인스턴스 시작을 눌러 인스턴스를 시작해 줍니다.

 

7.  Putty 연결을 위해 putty configuration

SSH – AUTH – Credential 로들어가 발급받은 ppk키를 넣어줍니다.

로그인 id ubuntu 입니다. (별도의 설정을 했으면 설정한 id 사용해줍니다.)

 

 

 

1.  편집기에서 nano.env 열어 변수를 채워넣어줍니다

 

** 두번째 WOODPECKER_LETS_ENCRYPT 부분은 HTTPS 사용할 있으면 true 그렇지 못한다면 false 지정해주세요.

 

** 세번째 ORGS 비워 주셔야됩니다.

 

2.  WOODPECKER_GITHUB_CLIENT_ID WOODPECKER_GITHUB_CLIENT_SECRET 얻으려면 GITHUB APPLICATION 만들어야 됩니다. https://github.com/settings/applications/new

3.  URL 이동해서 애플리케이션 등록 클릭

4.  Drone 호스팅 도메인으로 홈페이지 url 설정합니다. 도메인이 있으면 본인의 도메인으로,aws공개도메인으로사용하는경우ec2-13-125-247-75.ap-northeast-2.compute.amazonaws.com 다음과 같은 주소 형태입니다

5.  Callback URL ec2-13-125-247-75.ap-northeast-2.compute.amazonaws.com/authorize 과 같은 형태로 설정해주세요

 

 

 # Docker 설치

sudo apt update -y && sudo apt install -y ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

 

# Docker-compose 설치

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && sudo chmod +x /usr/local/bin/docker-compose

# Woodpecker CI Docker compose 템플릿 복제

git clone https://github.com/devforth/woodpecker-compose-template.git
cd woodpecker-compose-template/
cp .env.sample .env

 

1.  편집기에서 nano.env 열어 변수를 채워넣어줍니다

 

** 두번째 WOODPECKER_LETS_ENCRYPT 부분은 HTTPS 사용할 있으면 true 그렇지 못한다면 false 지정해주세요.

 

** 세번째 ORGS 비워 주셔야됩니다.

 

2.  WOODPECKER_GITHUB_CLIENT_ID WOODPECKER_GITHUB_CLIENT_SECRET 얻으려면 GITHUB APPLICATION 만들어야 됩니다. https://github.com/settings/applications/new

3.  URL 이동해서 애플리케이션 등록 클릭

4.  Drone 호스팅 도메인으로 홈페이지 url 설정합니다. 도메인이 있으면 본인의 도메인으로,aws공개도메인으로사용하는경우ec2-13-125-247-75.ap-northeast-2.compute.amazonaws.com 다음과 같은 주소 형태입니다

5.  Callback URL ec2-13-125-247-75.ap-northeast-2.compute.amazonaws.com/authorize 과 같은 형태로 설정해주세요

 

6.  다음과 같은 client 발급 시크릿 생성하여 .env 파일에 복사해줍니다

7.  이제 docker compose-up 실행시킵니다.

완료되면 본인의 주소로 woodpeckr의 첫모습(?)을 볼 수 있습니다.

# Woodpecker CI/CD 프로젝트 구성

간단하게 echo 수행하는 하나의 shell script 구성된 프로젝트를 빌드해보겠습니다.

Woodpecker 이동하여 저장소 추가를 클릭 저장소를 enable 클릭하여 저장소를 활성화 시켜보세요.

 

톱니 바퀴를 누릅니다.

 

Save Setting 해서 repo setting 완료해줍니다.

 

다음으로 repo 다음과 같은 내용으로 .woodpecker.yaml 만듭니다.

 

https://woodpecker-ci.org/docs/usage/pipeline-syntax

woodpecker document 참조하셔도 좋습니다.

 

https://github.com/MachDn/woodpecker-cicd/blob/master/.woodpecker.yml

 

저는 다음의 링크에 있는 소스 코드와 같이 작성해줬습니다.

 

 

다음의 파이프라인은 mysql 서비스 컨테이너를 실행합니다, 빌드 단계에서는 mysql 이미지의 컨테이너를 사용하여 mysql 서비스에 대한 연결을 테스트하고 연결이 설정이 까지 시도하다가 종료되는  파이프라인입니다.

 

# 소스코드 참조

https://github.com/MachDn/woodpecker-cicd

 

GitHub - MachDn/woodpecker-cicd: woodpecker-cicd project

woodpecker-cicd project. Contribute to MachDn/woodpecker-cicd development by creating an account on GitHub.

github.com

CICD 도구인 WOODPECKER 사용해서 쉽게 애플리케이션을 Production 환경에 쉽고 간편하고 빠르게 구축 있습니다. 진행상황을 부분별로 나누어 손쉽게 확인 관리 있는 장점이 있습니다.자체 호스팅 되는 이점으로 데이터 취약점 부분을 생각할떄도 안전하고 개발 프로세스를 간소화하고 생산성을 높이는 도구가 같습니다.

댓글