-
Notifications
You must be signed in to change notification settings - Fork 0
자동배포 설정하기
SeungChulNa edited this page Feb 15, 2022
·
24 revisions
자동배포하는 방법에 대한 페이지입니다. 아래와 같은 기술을 사용합니다.
- 젠킨스
- AWS의 S3
- AWS의 CodeDeploy
해당 작업전에 준비해야 하는 사항은 아래와 같습니다.
- 웹애플리케이션을 배포할 EC2 인스턴스
- 로컬 PC에 도커 설치
-
링크에서 젠킨스의 도커 이미지를 pull받습니다.
이때, 그냥jenkins
를 받으면 안되고,jenkins/jenkins:lts
로 받아야 합니다. - pull 받은 이미지를 가지고 젠킨스 컨테이너를 생성합니다.
반드시 컨테이너의 8080포트에 로컬PC의 포트를 매핑해줘야 합니다. 이 주소로 젠킨스 페이지에 접속하기 때문입니다.
아래의 경우http://localhost:48080
으로 젠킨스에 접속하게 됩니다. - 젠킨스 컨테이너로 진입해서 자바 11을 설치해줍니다.
# 컨테이너로 진입합니다.
docker exec -itu 0 jenkins-container /bin/bash
# 패키지매니저를 업데이트하고, 자바11버전과 zip 명령어를 설치합니다.
apt-get update
apt-get install openjdk-11-jdk
apt-get install zip
- vim도 설치해주도록 합니다.
apt-get install vim
-
http://localhost:48080
으로 접속하면 다음과 같은 페이지를 볼 수 있습니다.
지시사항대로/var/jenkins_home/secrets/initialAdminPassword
으로 이동해서 비밀번호를 가져오도록 합니다.
view 명령어로 파일을 읽기전용으로 열고, 안의 내용을 복사해서 로그인 페이지에 입력합니다.
view /var/jenkins_home/secrets/initialAdminPassword
- 왼쪽 버튼을 클릭해서 플러그인을 설치합니다.
- 설치 완료를 기다립니다.
- 설치가 끝나면 젠킨스 계정정보를 물어봅니다. 입력해주고 save and continue버튼을 클릭합니다.
- S3버킷을 생성합니다.
- IAM 사용자를 생성합니다.
- 사용자는 다음의 권한을 가져야 합니다. [AmazonS3FullAccess, AWSCodeDeployFullAccess]
- 자격증명유형은 액세스키여야 합니다.
- CSV 파일은 꼭 저장하도록 합니다.
- IAM에서 다음과 같이 ROLE을 생성합니다
- AWS 관리콘솔에서 CodeDeploy로 이동해서 애플리케이션을 생성합니다.
- 배포그룹을 생성합니다.
- Jenkins관리 > 플러그인 관리 > 설치가능 탭으로 이동한 다음 검색창에 s3 publisher라고 검색하고 설치합니다.
- codedeploy라고 검색한 다음 설치합니다.
- S3 설정을 하기 위해 Dashboard > Jenkins 관리 > 시스템 설정으로 이동합니다.
- Amazon S3 profiles을 찾고 프로필을 추가합니다.
- AWS CodeDeploy Credentials를 찾고, 액세스 키와 시크릿 키를 입력합니다.
- 새로운 Item 버튼을 누른 후 다음과 같이 설정하여 스크립트를 생성합니다
- 소스코드 관리에서 Git을 선택하고 저장소의 URL을 입력합니다
- 배포용 브랜치가 따로 있다면, 브랜치를 지정할 수도 있습니다.
- Build에서 Add build step을 클릭 후 execute shell을 선택합니다.
- 실행할 쉘 스크립트를 입력합니다
# 빌드를 위해 백엔드 디렉토리로 이동
cd /var/jenkins_home/workspace/deploy-qnaoverflow/be/qnaboard
# 백엔드 CodeDeploy 스크립트를 루트로 가져옴
mv appspec.yml ../../appspec.yml
# 배포 완료 후 앱을 실행하는 스크립트 가져옴
mkdir -p ../../scripts
cp ./deploy.sh ../../scripts/deploy.sh
cp ./beforeDeploy.sh ../../scripts/beforeDeploy.sh
# 실행권한을 위해 chmod 수행
chmod +x gradlew
# git repository에는 없는 설정파일 주입
cp /var/jenkins_home/workspace/ignored-settings/* /var/jenkins_home/workspace/deploy-qnaoverflow/be/qnaboard/src/main/resources/
# 빌드
./gradlew clean build
# 워크스페이스 루트로 이동
cd /var/jenkins_home/workspace/deploy-qnaoverflow
mkdir -p deploy
mv ./be/qnaboard/build/libs/qnaboard-0.0.1-SNAPSHOT.jar ./deploy/qnaboard-0.0.1-SNAPSHOT.jar
# 빌드된 jar를 zip으로 압축
cd deploy
zip -r deploy-be.zip *
- 빌드 후 조치에서 publish artifacts to S3 Bucket을 선택하고 다음과 같이 설정합니다.
- 그 다음 빌드 후 조치를 추가합니다. Deploy an application to AWS CodeDeploy입니다.
- 젠킨스의 빌드버튼을 클릭하여 배포를 발생시킵니다. 하지만 스크립트에서 필요로 하는 폴더가 존재하지 않아서 배포는 합니다. 그럼에도 배포를 하는 이유는, 첫 배포를 시도해야 workspace폴더가 생기기 때문입니다. 배포를 시도하고 나면, 아래와 같이 workspace폴더 밑에 프로젝트 폴더가 생긴 것을 확인할 수 있습니다.
$ pwd
/var/jenkins_home/workspace/deploy-qnaoverflow
$ ls
README.md be design jenkins
- workspace폴더 밑에 ignored-settins라는 폴더를 생성하고, 그 안에 github 저장소에 올라가있지 않은 설정파일을 넣어둡니다.
배포스크립트는 해당 경로에 있는 모든 파일을 복사해서 백엔드 프로젝트의 resources폴더에 붙여넣습니다.
$ mkdir ignored-settins
$ cd ignored-settins/
$ cp /external/QnaBoard-wiki/application-* ./
$ ls
application-local.yml application-oauth.yml
- 링크를 참고해서 CodeDeploy에이전트를 설치합니다.
sudo yum update
sudo yum install ruby
yum install wget
sudo yum install wget
wget https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install
chmod +x ./install
sudo ./install auto
- EC2 인스턴스에 CodeDeploy 권한이 있는 IAM Role을 추가합니다.
- CodeDeploy 에이전트를 재시작합니다.
sudo service codedeploy-agent restart
- Build Now 버튼을 클릭하여 자동배포를 시작합니다.
- 빌드에 성공하면 체크 아이콘이 뜹니다.
- AWS관리콘솔의 CodeDeploy페이지의 배포내역으로 이동해서 배포가 잘 되었는지 확인합니다.