1️⃣

GithubActions로 CICD구축-GCP편 (with Springboot) (BeachCombine프로젝트)

작성일자
Feb 26, 2023
태그
WEB/INFRA
HIGHLIGHT
프로젝트
BeachCombine
책 종류

1. 환경변수 설정

1) Settings-Security-Sercrets and variables-Actions 탭 들어가기

notion image

2) New Repository secret 클릭

3) env.properties 혹은 application.yml(properties) 내용 등 github에 올리지 않았던 파일 내용 작성

  • 이름은 대문자로 해주세요
  • Secret 안의 내용은 생성하고 싶은 파일 내용을 그대로 넣으면 됩니다.
notion image

3) Repository secrets 생성 완료

2. CI 구축

  • CI: Github에 올라와있는 자바 프로젝트를 jar 파일로 빌드하는 작업을 자동화할 것입니다.

1) Actions - Java with Gradle의 Configure 선택

notion image

2) Deploy.yml 아래와 같이 작성

3) 새 브랜치 파서 커밋 날리기

notion image
  • 혹시, PR 안쓰는 프로젝트라면 그냥 develop으로 커밋 날려주세요.

4) PR 생성하기

notion image
  • 아래 문장에 의해 PR 날리면 테스트 가능합니다.

    5) Actions 탭으로 들어가서 build 되는지 확인하기

    notion image
    notion image

    3. CD 구축

    • CD: 앞서 빌드한 jar 파일을 바탕으로 docker image를 생성하고, docker hub에 푸시했다가 ec2 혹은 gcp vm instance 환경에서 해당 이미지를 pull 받아와 배포하는 작업을 자동화할 것입니다.

    [1] docker image 생성하고 docker hub에 푸시하는 작업 자동화

    💡
    주의할 점!
    • 도커 허브 리포지토리는 꼭 Private으로 생성해주세요!
    • 만일 public으로 생성하고 싶으시다면, github secret을 사용하지 않고 docker secret을 적용해줘야 하는 데 해당 블로그는 그 부분 내용까지 포함하고 있지 않습니다.

    1) docker username, password 환경변수에 추가하기

    • 아래 그림처럼 생성되면 됩니다
      • notion image

    2) deploy.yml 작성

    아까 적던 코드에 이어서 아래 docker build 부분을 입력해주세요

    3) 커밋 날린 후 도커허브에 가서 이미지 제대로 들어왔는지 확인

    notion image
    notion image

    [2] gcp vm instance 환경에서 해당 이미지 pull 받아와 배포하는 작업 자동화

    1) Puttygen 사용해서 SSH 키 생성

    notion image
    • Generate 를 클릭한 후 마우스를 마구 흔들어 위 화면처럼 키를 생성합니다.
    • Key comment에 root, ec2-user 등과 같은 적당한 이름 적어주시고,
    • Key passphrase는 선택사항이긴 하지만 보안을 위해 원하시는 비밀번호로 적어줍니다.
    • Save private key를 눌러 로컬의 원하는 폴더에 저장합니다. (추후에 써야하니 해당 폴더 위치는 기억합니다.)
    • Conversions 탭을 눌러 Export OpenSSH key를 눌러 로컬의 원하는 폴더에 저장합니다. 저는 private key와 같은 폴더에 저장해줬습니다.

    2) GCP에 key 정보 입력해주기

    • Compute Engine -> 메타데이터를 클릭
      • notion image
    • SSH키 탭을 누르고 수정을 누르고, 제일 밑에 있는 ”+ 항목 추가” 를 누르기
    • PuttyGen에서 복사한 public key 내용을 그대로 붙여넣기 (public key는 위에 puttygen 사진에서 제가 가려놓은 부분입니다.)

    3) putty에서 key 제대로 만들어졌는지 ssh 접속 테스트해보기

    • 위의 Keycomment내용@GCPvm외부ip 를 Host name에 적어줍니다.
      • 예를 들면 root@35.232.22.73 과 같이 적어줍니다.
        • notion image
    • Connection-SSH-Auth 탭으로 들어가 Browse를 클릭해 아까 로컬에 저장해둔 private key파일을 택합니다.
    • 하단에 Open을 누릅니다.
      • notion image
    • passphrrase를 입력하란 문구가 나오면, 아까 puttyGen에서 입력했던 passphrase를 입력해줍니다.
    • 정상적으로 들어와졌습니다.
      • notion image

    4) deploy.yml 파일에 아래 코드를 추가해줍니다.

    • 이미지 이름(beachcombine_spring)은 Docker-compose.yml 파일의 application.image에 지정해둔 것입니다.
      • notion image

    5) github에 ssh keys 등록

    notion image
    • GitHub 계정 설정에서 "SSH and GPG keys" 탭으로 이동하여, "New SSH key" 버튼을 클릭
    • title은 원하는 이름으로 넣어주세요. 저는 프로젝트 이름으로 넣어줬습니다.
    • Key 부분에 PuttyGen에서 복사한 public key 내용을 그대로 붙여넣기 (public key는 위에 puttygen 사진에서 제가 가려놓은 부분입니다.)

    6) github에 환경변수 등록

    • SSH_PRIVATE_KEY라는 이름으로 아까 로컬에 저장해둔 openSSHkey 파일의 내용을 그대로 복사해와 붙여 넣어줍니다. (중요,,,,)
    • SSH_USERNAME라는 이름으로 아까 Key comment 내용을 넣어줍니다. ex) root
    • SSH_PASSPHRASE라는 이름으로 Key passphrase 내용을 넣어줍니다.

    7) 커밋을 날려 제대로 배포되는지 확인합니다.

    • 저는 7트에 성공했네요,,,, 이 정도면 저번에 했을 때에 비하면 선방한 거 같습니다^^
    • 뭐가 저를 애먹였냐면,, SSH_PRIVATE_KEY에 openSSHKEY를 안넣고 그냥 public key를 넣어서 문제가 발생한 걸 모르고 다른 걸 계속 고쳤어요,,
    notion image
    notion image