** Role 설정
CI/CD 작업을 진행하면서 3개의 Role을 생성해주어야 한다.
1. Tomcat IAM Role (tomcat 서버에서 s3에 .zip 파일을 가져올 수 있는 Policy 부여)
: S3FullAccess (.zip 파일을 s3에서 가져오기)
2. Jenkins IAM Role (Jenkins가 S3에 파일 업로드하고 CodeDeploy에게 Deployment 생성 및 배포 요청하는 Policy)
: S3FullAccess
: CodeDeployFullAccess
3. CodeDeploy IAM Role (CodeDeploy가 CD 작업을 수행할 수 있도록 Policy 부여)
: AWSCodeDeployRole
: CodeDeployAdditionalPolicy (If use Launch Template)
아래의 작업은 Jenkins가 Github으로부터 소스 코드를 가져와서 Maven 빌드 이후 S3에 업로드를 하기 때문에 2번의 작업이 선행되어야 한다. (Jenkins Role에 Policy 부여하고 EC2에 Attach하는 과정은 생략)
과정 요약
1. Git Repo에서 Git Push를 통해 소스 코드 업데이트
2. Jenkins는 Webhook에 의해 Trigger되고, Maven 3.6.3을 통해 clean build 진행
3. 빌드 된 이후에 Jenkins가 S3에 Zip 파일을 업로드
4. S3 Bucket에 들어가서 확인
1. Git Repo 생성
2. Github Integration 설정, Webhook 설정
2번 단계 이전에 Jenkins의 Public IP:8080으로 접근 후 초기 패스워드 기입 -> 추천 플러그인 설치를 해준다.
Dashboard → Jenkins 관리 → 플러그인 관리 → 설치 가능
→ Github Integration 설치
3. Webhook 설정
Git Repository에서 Push Event가 발생하면 Jenkins를 Trigger한다.
- Payload URL : http://{{Jenkins_ip}}:8080/github-webhook/
- Content Type : application/json
4. GitHub Token 받은 후 Jenkins에 설정
Github 메인 페이지에서 우측 상단 아이콘 -> Settings 선택 -> Developer Settings -> Personal access tokens -> Generate new token 선택
범위로는 Repo, Admin:repo_hook을 선택 후 Token을 생성해준다.
발급한 Token 정보를 이용하여 Jenkins와 GitHub 연동
Jenkins 관리 -> 시스템 설정 -> Github Server -> 'Add' 클릭
- Kind : Secret Text를 선택해준 이후 Github으로부터 발급받았던 Token을 기입해준다.
- ID : 해당 Token임을 식별할 수 있는 ID 기입
후에 Test를 진행했을 때 Verified 라고 뜨면 연결이 된 것이다.
5. Build 도구 설정
Jenkins 관리 -> Global Tool Configuration -> Maven 3.6.3 선택 (Install from Apache)
6. New Item 생성
하나의 Jenkins 프로젝트를 생성한다고 보면 되고 Jenkins가 테스트, 빌드, 배포를 하게 된다.
FreeStyle project 선택
- Freestyle은 웹에서 하나하나 봐가면서 설정하고자 할 때 선택하면 됨
- Pipeline은 Jenkinsfile을 통해 Code로써 CI를 수행할 수 있다.
- Github URL, Git Credentials 설정
Project URL : GitHub Repo URL을 기입해준다.
소스 코드 관리는 Git을 선택하며, 'Add' 클릭 후 본인의 ID, Password를 기입해준다.
- Invoke top-level Maven targets 선택 후
clean package -D maven.test.skip=true 를 기입해준다.
=> mvn clean package ~~ 명령어를 치는 것과 동일함
- Execute Shell
deploy/ 디렉터리로 appspec.yml 및 scripts/ , demo.war 파일을 옮긴 후 zip 파일로 압축하여 S3에 업로드한다.
7. 테스트
- Git Push
- Jenkins 서버 내의 Workspace/demo 디렉터리
GitHub 계정 정보를 가지고 있기 때문에 Source Code를 Jenkins 본인 서버로 가져온 다음 Maven으로 빌드를 진행함
- S3에 deploy.zip 파일이 업로드 된 상황
- S3에 파일 업로드가 완료
그 이후에는 이 S3 파일로부터 CodeDeploy가 WAS 서버에 appspec.yml에 기입된 대로 배포를 진행하게 된다.
- Ref