토스ㅣSLASH 23 - 유연하고 안전하게 배포 Pipeline 운영하기 - 6 (PipeLine 구성)

박원균·2023년 7월 20일
0

토스 Slash 2023

목록 보기
6/9
post-thumbnail

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에 배포를 진행할 것입니다.

profile
함바라기

0개의 댓글