구글 클라우드는 Deployment manager는 주요 어플리케이션을 손쉽게 배포/구성할 수 있다. 이를 이용하여 Gitlab Repository에 저장된 Container 소스 코드를 자동으로 Build하여, 구글 클라우드의 Private Container Image 저장소 서비스인 Google Container Registry (https://cloud.google.com/container-registry/) 에 Container Image를 Push 하는 방법을 소개한다.
=========================================================================================
[Deployment manager로 Jenkins 구성하기]
1. Google Cloud Console에서 Cloud Launcher로 이동하여 Jenkins를 검색
Jekins를 클릭하면 구성할 버전과 각종 정보를 확인할 수 있다. Launch on Compute engine을 눌러 구성을 시작한다.
2. 대단할 것 없이 Jenkins가 구성되어 있는 VM을 생성하는 것! Compute Engine 구성을 위한 각종 설정을 확인하고 Deoploy를 클릭하여 VM을 생성한다. 당연하지만 구성된 VM은 일반 GCE와 동일한 취급이다. VPC의 네트워크 구성과 방화벽 정책 등이 Jenkins를 접속함에 문제가 없는지 점검해야 하며, Build 를 신속하게 진행하고자 한다면 Machine Type을 좀 더 상위 타입으로 변경할 수도 있을 것이다.
3. 구성 완료 후 잠시 후 클라우드 콘솔의 Deployment manager에 들어가 보면 Deploy 완료된 Jenkins가 보인다.
클릭하면 구성된 jenkins에 접속하기 위한 IP 정보와 계정정보를 확인 할 수 있다.
해당 정보로 Jenkins 로그인
=========================================================================================
[Jenkins Credential 구성]
Jenkins가 Gitlab의 Repository에 접근할 수 있도록 Credential울 구성한다.
1. 구글 클라우드 콘솔 > Compute Engine > VM Instances > Jenkins VM에 SSH로 접속
2. su 커맨드를 이용하여 사용자를 Jenkins로 변경한 후 /var/lib/jenkins 폴더로 이동하면 .ssh 폴더가 보일 것이다. ssh-keygen을 실행하면 여기에 Keypair가 생성 될 것이다.
생성된 키 페어의 공개키(id_rsa.pub)를 확인하여 내용물을 복사한다.
3, 소스가 저장된 Gitlab에 로그인 한 후 User setting > SSH Keys에 복사한 id_rsa.pub 값을 붙여넣기 하고 Add key를 진행한다. 이제 Jenkins의 Key로 Gitlab에 접근할 수 있다.
4.Jenkins에 접속하여 생성된 개인키로 Gitlab에 접근할 수 있도록 Credential을 구성한다.
Jenkins > Manage Jenkins > Credentials > System > Add domain > Add Credentials
Kind와 Scope을 아래와 같이 구성하고 Username을 지정하고 OK, 이제 Jenkins는 목표로한 Gitlab에 접근할 수 있다.
5. 본 과정은 최종적으로 빌드된 Docker image를 구글 클라우드의 Container Registry에 Push하는 것이 최종 목표이다.
이를 위해서는 Container Registry에 이미지를 업로드하기 위한 권한 구성(IAM) 되어야만 한다.
구글 클라우드 콘솔 > IAM > Service Account > Create service account를 클릭하여 아래와 같이 Project Role을 할당 한다.
Container Registry는 일종의 저장소 서비스 이므로 Storage 관련 Role을 필요로 한다.
Save를 클릭하면 JSON 형태의 Service account Key 파일이 로컬에 다운로드 된다. 해당 파일의 위치를 기억한다.
6. 다시 Jenkins의 Add Credential로 이동한 후 아래와 같이 Kind를 지정하고 Choose File을 눌러 전단계에서 다운로드 한 Service account Key파일을 선택하자. Project name을 적어주고 OK를 클릭하면 최종적으로 Credential 구성이 완료된다.
=========================================================================================
[Jenkins Project 구성하기]
1. 진행하기에 앞서 본 예제는 Jekins의 Docker Plugin을 필요로 한다.
Jekins > Manage Jenkins > Manage > Plugin > Available 탭으로 이동하여 Docker를 검색
CloudBees Docker Build and Publish Plugin을 설치하고 Jenkins를 Restart 한다.
2. Jenkins > New Project > Freestyle Project 생성
3. 아래와 같이 정보를 입력한다. Github Project는 필수는 아닌 일반 정보이다.
4. Gitlab의 주소[ git@IBlahBlah.git] 를 복사
5. Source Code management에 복사한 gitlab 주소를 붙여넣고 Credential은 아까 생성한 Credential을 지정한다.
*앞단계의 정상적인 Credential 구성을 완료하지 못하였다면 아래 정보를 입력한 후 에러를 출력할 것이다.
6. Docker Image Build & Push 구성 Build > Add Build Step 드롭다운 메뉴 > Docker Build and publish 선택
*1번 단계의 Docker Plugin이 설치되어 있어야만 보인다!
아래와 같이 구성정보를 입력한다.
Repository Name (이곳에 Image가 저장된다.) : [GCP Project ID]/[Container Registry Name]
Tag : Image Build 시 붙는 테그
Docker Registry URL : 구글 클라우드의 Container Registry Host 주소를 적는다. 여기서는 us.gcr.io를 지정하였으며, 가능한 정보는 https://cloud.google.com/container-registry/docs/pushing-and-pulling#pushing_an_image_to_a_registry 를 참조한다.
Registry Credential 은 생성한 구글 Service Account를 선택
Build Context : Docker Build시 필요한 추가 인자값이 있다면 넣어준다.
Dockerfile Path : Image build 시 필요한 Docker 파일의 상대 위치, Gitlab Repository의 Root 폴더이 Docker 파일이 없다면 경로를 지정하도록 한다.
7. 여기 까지 구성하고 Build now를 클릭하면 구글 클라우드 콘솔 > Container Registry에 아래와 같이 예쁘게 Build되어 업로드된 Image들을 확인 할 수
...............없을 것이다!!!!!
이유인 즉슨 현재까지 따라왔을 경우, 정작 Image를 Build할 Jenkins에 Docker가 설치되어 있지 않기 때문이다. -_-;
Jenkins VM에 SSH로 접속하여 Docker를 설치를 진행하도록 하자. 다음으로 계속...
'Cloud & Virtualization' 카테고리의 다른 글
Google Cloud VPN과 Mikrotik 공유기간 IPSec 터널 구성하기 (0) | 2018.07.19 |
---|---|
Docker Container의 Logging 구조 요약 (1) | 2018.07.12 |
Docker를 통한 WordPress 초간단 배포 (0) | 2018.05.28 |
VMWare ESXi 가상머신에 USB Controller Passthrough 설정 (0) | 2018.05.28 |
Java를 이용한 GCP compute instance metadata 가져오기 샘플 코드 (0) | 2018.05.28 |