Bitbucket pipeline

Han Gyul Kang·2022년 12월 12일
2

개발노트_2022

목록 보기
3/3
post-thumbnail

매번 소스를 build해서 jar를 추출, 각 개발계 서버로 배포하고 수동으로 application kill/start를 하는 것 처럼 비효율적인것이 있을까?

우선 손가락이 아프다.
신입 개발자일 때는 그래도 이럴 때 리눅스 명령어를 한 번이라도 더 쳐보자! 하는 생각이었지만 워낙 단순한 명령어들이기 때문에 (대표적으로 ls -al, ll, cd) 조금만 반복하면 금새 숙달된다.

이런 반복 작업을 편리하게 해주는 것이 Pipeline이다.
우리 회사에서 사용중인 Bitbucket은 Pipeline을 쉽게 구축할 수 있도록 도와주는데 훗날 유용하게 써먹기 위해 본격적으로 기록을 시작한다...

Bitbucket > S3 bucket > CodeDeploy > EC2 Instance

기본 개념

  1. Bitbucket Repository
    기본적인 소스 저장소이고, 해당 Repository 내의 일부 또는 모든 Branch에 Pipeline을 연결할 수 있다.
  1. Bitbucket Pipeline
    Repository > S3 > CodeDeploy의 Application까지 연결할 수 있다.
    bitbucket-pipelines.yml을 작성하여 구축한다.
    1. Atlassian에서 제공하는 Docker image에서 소스파일을 test&build
    2. 소스 파일을 zip으로 압축 후 S3 bucket에 upload
    3. CodeDeploy를 통해 각 Instance로 배포
  1. Amazon S3
    AWS에서 제공하는 클라우드 스토리지로 쉬운 예로 구글 드라이브와 같다고 할 수 있고, 유저들이 업로드하는 파일들을 저장하기 위해 주로 사용하지만 여기서는 zip으로 압축된 소스파일을 보관하는 저장소로 사용한다.
    개발자가 지정한 S3 bucket에 올라온 zip파일을 CodeDeploy를 통해 각 EC2 Instance로 배포한다.
  1. AWS CodeDeploy
    각 프로젝트 내의 bitbucket-pipeline.yml에 지정한 Application과 이하 배포 그룹을 설정할 수 있고, 여기서 배포 대상 Instance들을 배포 그룹 하나로 관리할 수 있다(=여러 인스턴스에 한 번에 배포할 수 있다.).
    각 인스턴스에서 S3로부터 받은 소스는 개발자가 appspec.yml에 지정한 *.sh 파일을 통해 배포된다(After/Before install, Application stop/start 등..).
  1. EC2 Instance
    가상 컴퓨터. 서버 소스는 해당 컴퓨터에 있고, 소스가 배포되는 대상이다.

AWS 계정에 CodeDeploy 정책 권한 추가하기

각 개발자는 본인의 AWS 계정에 CodeDeployRole을 추가해야한다(IAM).

CodeDeploy 정책 추가

CodeDeploy 어플리케이션 설정

CodeDeploy를 사용하기 위해 우선 Application을 생성해야 한다.

Application 생성

Application 생성 과정

  1. 적당한 Application 이름을 지정한 뒤, 컴퓨팅 플랫폼에서 EC2/온프레미스를 선택하고 애플리케이션을 생성한다.
  2. 배포 그룹을 생성한다.
    환경 구성 시 Amazon EC2 인스턴스에 여러대의 인스턴스를 등록할 수 있다.

EC2 instance 및 기타 설정

  1. aws cli 설정하기
    EC2 instance에 aws cli가 설치되어 있지 않다면 설치하고 aws cli에 aws 계정 정보를 입력해야 한다. (aws cli configure 를 입력했을 때 어떤 정보가 나오지 않는다면 aws cli에 aws 계정 정보가 설정되지 않은 상태...)

    aws cli에 필요한 정보는 [IAM → 사용자 → 계정 선택 → 보안 자격 증명 → 액세스 키 ID]에 있다.
    이미 알 수 없는 경우에는 액세스 키 중 사용하지 않는 키를 비활성화 한 후에 다시 발급받으면 다운받은 csv 파일에 AWS Access Key ID 와 AWS Secret Access Key ID가 나와 있다!
    aws cli configure 입력AWS Access Key ID, AWS Secret Access Key ID, region(region이 변경되지 않는 한 ap-northeast-2), json을 입력한다.

    입력을 마친 후에 aws cli configure 를 입력하면 입력한 정보들이 *로 가려진 채 출력이 됩니다.
  1. codedeploy-agent 설치하기
    자동으로 설치되었다면 현재 codedeploy-agent 가 작동중인지 확인한다.

    sudo service codedeploy-agent status
  1. EC2 instance 권한 설정하기
    CodeDeploy는 S3 에서 파일을 다운받기 때문에 EC2 instance에서 S3 bucket에 접근해 파일을 다운받을 수 있는 권한이 있어야 한다.

    EC2 콘솔에서 배포 대상 Instance를 선택하여 IAM 역할에서 미리 생성해둔 CodeDeployRole을 추가한다.
  1. appspec.yml 작성하기

    appspec.yml은 CodeDeploy를 통해서 소스가 배포되었을 때 동작을 정의하는 파일이다.

    appspec.yml 예제
    appspec.yml permission에 대한 설명

    아래 예제와 같이 각 동작별로 개발자가 작성한 *.sh 파일이 실행되게 할 수 있다.
hooks:
  ApplicationStop:
    - location: scripts/stop.sh
      timeout: 300
      runas: root
  BeforeInstall:
    - location: scripts/backup.sh
      timeout: 300
      runas: root
  AfterInstall:
    - location: scripts/deploy.sh
      timeout: 300
      runas: root
  ApplicationStart:
    - location: scripts/start.sh
      timeout: 300
      runas: root

Bitbucket repository 설정하기

  1. Bitbucket repository settings → PIPELINES Settings → Enable Pipelinse 설정
  2. Bitbucket repository settings → PIPELINES Repoistory variables에서 bitbucket-pipelines.yml에 쓸 변수를 미리 설정

    AWS Access Key ID
    AWS Secret Access Key
    AWS Default Region
    Application Name
    S3 Bucket
    S3 Key 등


    민감정보는 반드시 암호화하여 저장해둔다.

  3. bitbucket-pipelines.yml 파일 작성
    해당 파일 없이는 pipeline이 작동하지 않는다.

    Bitbucket pipeline 에 대한 자세한 설명
profile
피아노 치는 개발자

0개의 댓글