3. Jenkins Job 생성 - woowacourse-teams/2021-drop-the-code GitHub Wiki
3. 배포 과정
빌드/배포
- 빌드/배포 과정은 일반적으로 다음과 같다.
- Github, S3 등 코드 저장소로부터 코드를 가져온다.
- 코드를 빌드/테스트 한다.
- 빌드된 파일을 실제로 배포하려는 서버 또는 s3로 옮긴다.
- 빌드된 파일을 실행하는 스크립트를 실행한다.(Cloudfront의 경우 별도의 실행 필요없이 캐시 Invalidation 명령어 실행)
Jenkins Job 또는 Project 또는 Item
위에서 언급한 빌드/배포 작업들을 Jenkins에서 정의해야 하는데 정확한 용어를 모르겠음 각 Jenkins 페이지마다 사용하는 용어가 다름...ㅜㅜ 일단 여기서는 Jenkins Job이라고 통일
아래 새로운 Item(Job)을 클릭하면 여러가지 형태의 Jenkins Job 리스트가 나옴
여기서 내가 주로 사용하는 두 가지
Frestyle Project
- 왠만한 모든 빌드/배포 과정은 이 항목으로 만들 수 있음
- 대부분의 설정들이 클릭 또는 계정 인증 정보나 디렉토리 경로만 입력만 하면 돼서 편리함!
- 단점이라면 아래 pipeline은 각각의 작업들을 stage로 분리하면 각각의 작업 성공/실패 여부 로그들을 바로 확인할 수 있는데 이건 모든 로그를 한꺼번에 봐야한다.
Freestyle Project Log
Pipeline Log
Pipeline
- Freestyle Project와 달리 다음과 같이 코드로 모든 작업에 대한 정의를 해줘야한다.
- 처음에 진입장벽이 좀 있긴 하지만 쓰다보면 금방 익숙해짐
- Freestyle이든 Pipeline이든 설정 과정에서 디버깅을 할 일이 많은데 개인적으로 pipeline은 단계별 상태를 바로바로 보여줘서 더 편했음
pipeline {
agent any
tools {
// Install the Maven version configured as "M3" and add it to the path.
maven "M3"
}
stages {
stage('Build') {
steps {
// Get some code from a GitHub repository
git 'https://github.com/jglick/simple-maven-project-with-tests.git'
// Run Maven on a Unix agent.
sh "mvn -Dmaven.test.failure.ignore=true clean package"
// To run Maven on a Windows agent, use
// bat "mvn -Dmaven.test.failure.ignore=true clean package"
}
post {
// If Maven was able to run the tests, even if some of the test
// failed, record the test results and archive the jar file.
success {
junit '**/target/surefire-reports/TEST-*.xml'
archiveArtifacts 'target/*.jar'
}
}
}
}
}
일단 Freestyle Project로 빌드 배포 Job 만들어보자!
Publish over SSH 플러그인 설치
- 아까 위에서 언급한 플러그인인데 빌드된 파일을 원격지 서버로 옮기기 위한 플러그인이다.
- Jenkins 관리에 Plugin 관리로 이동
- "설치 가능" 탭 클릭 후 "Publish over SSH" 검색
- 재시작하면 귀찮으니까 "install without restart"
Publish over SSH 플러그인 설정
- 설치가 다 됐다면 다시 Jenkins 관리로 돌아가 "시스템 설정"에서 접속 설정을 해줘야 함
- 이 접속 설정은 Jenkins ec2 서버에서 배포용 ec2 서버로 파일을 옮기기 위한 설정
- 만약 배포 서버에 Jenkins를 설치했다면 필요 없음! 근데 생각보다 빌드 과정이 메모리를 많이 잡아먹어서 따로 하는걸 추천!
원격지 서버 접속을 위한 Private Key 설정
- 아래로 쭉쭉 내리다보면 Publish over SSH 탭이 있음
- 이제 여기에 "배포 서버"에 접속하기 위한 Private Key를 넣어야함
- 당황하지 말고 EC2로 만들었다면 ec2에 접속할 때 사용하는 ec2-key.pem "Key" 항목에 직접 넣어주면 된다.(나머지는 무시)
- pem 파일을 vim이나 cat으로 까봤을때 볼 수 있는 위아래 문자도 같이 넣어줘야함
-----BEGIN RSA PRIVATE KEY-----
.....
-----END RSA PRIVATE KEY-----
Private Key를 직접 만들었다면?
- Key를 직접 만들었다면 만들 때 입력한 Passphrase를 Passphrase와 Private Key를 입력
- Key를 Jenkins 서버에 파일로 갖고 있다면 "Path to key" 입력
원격지 서버 정보 설정
- Name - 원격지 서버 이름(나중에 Job에서 사용할 때 쉽게 구분할 수 있도록 정의)
- Hostname - 원격지 서버 IP(Jenkins이 배포 서버와 같은 VPC라면 private IP도 가능)
- Username - EC2 접속할 때 사용하는 Username 보통 Ubuntu는 "ubuntu", 아마존 AMI는 "ec2-user"
- Remote Directory - 원격지 서버에 접속한 순간 처음 위치하는 경로 (나중에 jar 파일을 위치시킬때 사용하기 때문에 잘 설정해야함, 보통 user의 홈 디렉토리 사용)
- 마지막 아래 Test Configuration을 눌러 접속이 잘 되는지 확인, Success가 뜬다면 성공!
Job을 만들어보자 (진짜...)
Job 생성
- Job 이름 입력 - 왠만하면 영어로 만들자
- job을 만드는 순간 jenkins workspace 경로에 이름을 기준으로 디렉토리가 만들어진다.
- Freestyle project를 클릭하고 ok!