Travis CI 배포 자동화

dawn·2021년 5월 30일
0

인프런

목록 보기
6/11

모든 문제를 다 해결했다! 프로젝트에 db비밀번호가 있지만....
이제 배포 자동화를 시도할 것이다.

CI & CD 란?

CI(지속적 통합) : 코드 버전 관리를 하는 VCS 시스템에 PUSH가 되면 자동으로 테스트와 빌드가 수행되어 안정적인 배포 파일을 만드는 과정
CD(지속적인 배포) : 빌드 결과를 자동으로 운영 서버에 무중단 배포까지 진행되는 과정

지속적으로 통합하기 위해서는 무엇보다 이 프로젝트가 완전한 상태임을 보장하기 위해 테스트 코드가 구현되어 있어야만 한다.

Preview

깃허브에 push -> .travis.yml을 통해 travis CI에서 build를 실행 -> build가 정상적으로 실행되면 생성된 jar 파일을 S3에 저장 -> S3에 저장된 배포 관련된 파일들(.jar)을 받아서 CodeDeploy가 자동으로 배포
+CodeDeploy는 저장 기능이 없기 때문에 Travis CI가 빌드한 결과물을 받아서 CodeDeploy가 가져갈 보관할 수 있는 공간이 필요해서 S3를 생성
+CodeDeploy가 build도 하고 배포도 할 수 있지만 이렇게 하면 빌드 없이 배포만 필요할 때 대응하기 어렵다.

1. Travis CI 연동하기

  • [계정명 -> Settings]로 들어가 깃허브 저장소 상태바 활성화 하기

    Travis CI 웹사이트에서 설정은 이것이 끝이다. 상세한 설정은 프로젝트의 yml 파일로 진행하니, 프로젝트로 돌아가자

2. 프로젝트 설정

+Travis CI의 상세한 설정은 프로젝트에 존재하는 .travis.yml 파일로 할 수 있다.
  • 프로젝트의 build.gradle과 같은 위치에 .travis.yml을 생성한 후 다음의 코드를 추가한다.
language: java
jdk:
  - openjdk11

branches:
  only:
    - master

# Travis CI 서버의 Home
cache:
  directories:
    - '$HOME/.m2/repository'
    - '$HOME/.gradle'

script: "./gradlew clean build"

before_deploy:
  - mkdir -p before-deploy # zip에 포함시킬 파일들을 담을 디렉토리 생성
  - cp scripts/*.sh before-deploy/
  - cp appspec.yml before-deploy/
  - cp build/libs/*.jar before-deploy/
  - cd before-deploy && zip -r before-deploy * # before-deploy로 이동후 전체 압축
  - cd ../ && mkdir -p deploy # 상위 디렉토리로 이동후 deploy 디렉토리 생성
  - mv before-deploy/before-deploy.zip deploy/freelec-springboot2-webservice.zip # deploy로 zip파일 이동

deploy:
  - provider: s3
    access_key_id: $AWS_ACCESS_KEY # Travis repo settings에 설정된 값
    secret_access_key: $AWS_SECRET_KEY # Travis repo settings에 설정된 값
    bucket: freelec-springboot-build # S3 버킷
    region: ap-northeast-2
    skip_cleanup: true
    acl: private # zip 파일 접근을 private으로
    local_dir: deploy # before_deploy에서 생성한 디렉토리
    wait-until-deployed: true

  - provider: codedeploy
    access_key_id: $AWS_ACCESS_KEY # Travis repo settings에 설정된 값
    secret_access_key: $AWS_SECRET_KEY # Travis repo settings에 설정된 값
    bucket: freelec-springboot-build # S3 버킷
    key: freelec-springboot2-webservice.zip # 빌드 파일을 압축해서 전달
    bundle_type: zip
    application: freelec-springboot2-webservice # 웹 콘솔에서 등록한 CodeDeploy 어플리케이션
    deployment_group: freelec-springboot2-webservice-group # 웹 콘솔에서 등록한 CodeDeploy 배포 그룹
    region: ap-northeast-2
    wait-until-deployed: true

# CI 실행 완료시 메일로 알람
notifications:
  email:
    recipients:
      - kot8585@gmail.com
  • branches
    - Travis CI를 어느 브랜치가 푸시될 떄 수행할지 지정한다.

  • chche
    - 그레이들을 통해 의존성을 받게 되면 이를 해당 디렉토리에 캐시하여, 같은 의존성은 다음 배포 때부터 다시 받지 않도록 설정

  • script
    - master 브랜치에 푸시되었을 때 수행하는 명령어

master 브랜치에 커밋과 푸시를 하고, 좀 전의 Travis CI 저장소 페이지를 확인해보자.


여기까지 완료하면 깃허브에 push를 하면 자동으로 테스트가 실행되고 build가 실행된다. 다음에는 Travis CI와 AWS S3를 연동해보자.

profile
안녕하세요

0개의 댓글