시스템 환경
- jenkins 인스턴스 (ec2 ubuntu 20.04)
- server 인스턴스 (ec2 ubuntu 20.04)
- 개발 데스크탑 (mac 12.0.1)
구현할 파이프라인 구조
- 개발 데스크탑에서 코드 작성 후 github push
- github에서 webhook -> jenkins instance
- jenkins 파이프라인실행
- git clone
- gradle build
- docker build
- docker image push
- jenkins 인스턴스에서 server 인스턴스로 ssh 접속
- server 인스턴스 docker image pull
- server 인스턴스 docker image run
- server 인스턴스 기존에 같은 서비스 존재 시 기존 서비스 종료
- jenkins에서 메일 또는 슬랙으로 결과 전송
Docker jenkins 이미지 설치 및 기본 설정
Docker jenkins dood 설정
Jenkins에서Docker plugin 설치 및 github 접근 권한 부여
Docker plugin을 설치
jenkins 파이프라인이 실행되면서 도커를 편리하게 사용하기 위해 docker plugin을 설치해야한다.
Dashboard -> Jekins 관리 -> 플러그인 관리 -> '설치 가능' 에서 docker를 검색하여 아래 두 개의 플러그인을 체크한다.
선택 후 하단의 'Download now and inistall after restart' 버튼을 눌러주면 플러그인을 설치하는 화면으로 전환된다.
체크박스를 체크하면 설치가 되면 자동으로 Jenkins가 재시작 된다.
github 접근 권한 부여
코드를 githup에 push 후 jenkins가 해당 코드를 clone받기 위해서는 해당 계정에 접근 권한이 있어야한다.
기존에는 github 권한을 github 계정 username과 password로 가능했지만 정책이 변경되어 권한을 부여받기위해서는 Personal access tokens이 필요하다.
먼저 github 계정에 접속 후
프로필 선택 -> settings -> Developer settings 선택
좌측 탭 Personal access tokens -> Generate new token 클릭
해당 페이지는 외부 서비스에서 해당 계정으로 접근 시 선택한 권한들을 부여해주는 키를 만드는 페이지이다.
jenkins는 저장소관련 권한만 있으면 되므로 repo만 선택하고, Expiration은 만료기간, Note에는 자신이 알아볼 수 있는 이름을 지정한다.
입력 후 하단의 'Generate token' 버튼을 선택하면 생성된다.
키는 한 번 노출 후 다시는 확인할 수 없으니 꼭 복사해서 메모나 백업해어야한다.
그리고 다시 jenkins로 돌아와 Dashboard -> ManageCredentials
Jenkins 선택 -> Gloabl credentials 선택을 하게되면 credential을 생성하는 페이지가 나온다.
해당 페이지에서는 jenkins agent 전역에서 사용될 에서 사용될 인증 정보 등을 생성할 수 있다.
Username - github 계정 id, password - Persnal access token, ID는 jenkins 파이프라인에서 해당 credencial을 가져올때 사용할 이름을 작성해주면 된다.
docker hub 접근 권한 부여 (계정 정보 입력)
파이프라인 단계의 docker push 및 docker pull 시에 docker hub의 계정 권한이 필요하므로 jenkins에 계정 정보를 입력해준다.
계정이 없다면 가입 후 진행
github와 마찬가지로 Credential 생성화면까지 들어간다.
Username - docker hub 계정 Id, Password- docker hub 계정 password, ID - 파이프라인 작성 시 사용할 이름
여기까지 진행하였다면 jenkins에서 plugin을 사용하여 git과 docker hub의 접근이 가능하게 되었다.
내용이 길어지는 관계로 코드작성은 다음 글에서 계속
'Jenkins' 카테고리의 다른 글
[Jenkins] Docker Jenkins로 Spring Boot 빌드 및 배포 - 2 (파이프라인 작성 및 빌드 테스트) (0) | 2021.12.17 |
---|---|
[Jenkins] Jenkins란? Jenkins를 사용하는 이유 및 Declarative pipeline 문법 (0) | 2021.12.14 |
[Jenkins] Docker Jenkins 이미지 설치 및 기본 설정 (2) | 2021.12.14 |