1토스ㅣSLASH 23 - 유연하고 안전하게 배포 Pipeline 운영하기 - 1 (기술 정리)
위 그림에 보이는게 기본 파이프 라인 구성도입니다. 개발자가 소스코드를 GIT이나 형상 관리 도구에 올리면 build서버에서 빌드를 진행하고 AWS의 ECR에 이미지를 업로드합니다. 그리고 DEV 서버와 PRD 서버에 배포를 진행합니다.
위 구성도를 GoCD로 만들기 위해 아래에 yaml 을 작성하였습니다.
format_version: 10
pipelines:
my-pipeline:
group: defaultGroup
label_template: ${COUNT}
lock_behavior: none
display_order: -1
materials:
git-9c06971:
git: https://github.com/miewone/myfirstgocd
username: E-MAIL
shallow_clone: false
auto_update: true
branch: main
encrypted_password: PASSWORD
stages:
- Build:
fetch_materials: true
keep_artifacts: false
clean_workspace: false
approval:
type: success
allow_only_on_success: false
jobs:
BuildProject:
timeout: 0
tasks:
- exec:
arguments:
- clean
- package
- docker:build
command: ./mvn
run_if: passed
- exec:
arguments:
- save -o /path/to/your/image.tar your-image-name
command: docker
run_if: passed
- Publish:
fetch_materials: true
keep_artifacts: false
clean_workspace: false
approval:
type: success
allow_only_on_success: false
jobs:
PublishImage:
timeout: 0
tasks:
- exec:
arguments:
- s3 cp /path/to/your/image.tar s3://miewone-images/
command: ./aws
run_if: passed
- Deploy-Dev:
fetch_materials: true
keep_artifacts: false
clean_workspace: false
approval:
type: success
allow_only_on_success: false
jobs:
DeployDev:
timeout: 0
tasks:
- exec:
arguments:
- user@dev-server "aws s3 cp s3://your-bucket-name/image.tar /path/to/destination/
&& docker load -i /path/to/destination/image.tar && docker run -d
-p 8080:8080 your-image-name
command: ssh
run_if: passed
위 텍스트는 기본적인 토대를 짜기 위해 작성한 것이며 제대로 동작하지는 않습니다.
GoCD를 이용하여 CI/CD를 구성하는게 목표이기 때문에 빌드서버를 따로 두어 자원 격리를 통해 리소스를 분리하고, 빌드와 배포 작업 중 문제가 발생하면 해당 서버에 모든 작업에 영향을 끼치는것을 방지하였습니다.
GoCD Server - Window
GoCd Agent 1 - WSL
GoCD Agnet 2 - 가상머신 내 Centos
GoCD Agnet 3 - 가상머신 내 Centos
현재 구성대로라면 agent 1이 빌드 서버가 될 것이고 agent 2, 3에 배포를 진행할 것입니다.