hyelie
hyelie
Hyeil Jeong
       
글쓰기    관리    수식입력
  • 전체보기 (495)
    • PS (283)
      • Algorithm (28)
      • PS Log (244)
      • Contest (6)
      • Tips (5)
    • Development (52)
      • Java (14)
      • Spring (23)
      • SQL (2)
      • Node.js (2)
      • Socket.io (3)
      • Study (4)
      • Utils (4)
    • DevOps (36)
      • Git (5)
      • Docker (4)
      • Kubernetes (2)
      • GCP (3)
      • Environment Set Up (8)
      • Tutorial (12)
      • Figma (2)
    • CS (74)
      • OOP (7)
      • OS (24)
      • DB (2)
      • Network (24)
      • Architecture (0)
      • Security (2)
      • Software Design (0)
      • Parallel Computing (15)
    • Project (15)
      • Project N2T (5)
      • Project ASG (0)
      • Project Meerkat (1)
      • Model Checking (7)
      • Ideas (2)
    • 내가 하고싶은 것! (34)
      • Plan (16)
      • Software Maestro (10)
      • 취준 (8)
hELLO · Designed By 정상우.
hyelie

hyelie

EC2   Docker   Jenkins   Spring   Gitlab 자동 빌드 - 2. Docker, Jenkins, gitlab 연동
DevOps/Tutorial

EC2 Docker Jenkins Spring Gitlab 자동 빌드 - 2. Docker, Jenkins, gitlab 연동

https://tape22.tistory.com/16?category=928488

 

위 포스팅을 많이 참고했다.

 

1. EC2에 Docker, docker-compose

지난 포스팅에서 VS Code로 linux EC2에 접근했다. Ctrl + `를 눌러서 docker를 EC2에 설치하자.

$ sudo yum install docker
$ sudo dockerd

 

이후에 docker ps를 치면 에러가 난다.

$ docker ps
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json": dial unix /var/run/docker.sock: connect: permission denied

 

권한을 준다.

$ sudo chmod 666 /var/run/docker.sock

 

그러고 docker ps를 눌러서 확인해 보자.

$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

 

잘 된다!

 

다음으로 docker-compose도 설치하자.

$ sudo curl -L https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ docker-compose --version
docker-compose version 1.26.2, build eefe0d31

 

docker-compose도 설치되었다.

 

 

 


 

 

 

2. Docker 위에 Jenkins 설치

docker-compose.yml을 이용해서 Jenkins를 설치해 보자. compose 폴더 안에 docker-compose.yml 파일을 생성하자.

 

home/ec2-user/compose/docker-compose.yml

version: "3"

services:
    jenkins:
        container_name: jenkins-compose
        image: jenkins/jenkins:lts
        user: root       
        ports:
         - "8081:8080"
        volumes:
         - /home/ec2-user/compose/jenkins:/var/jenkins_home
         - /home/ec2-user/compose/.ssh:/root/.ssh

간단하게 설명하자면, image는 jenkins/jenkins의 lts 버전을 가져오고, port는 외부 접속 8081 포트를 내부 8080으로 바꾸어주겠다는 말이다. 그리고 volume같은 경우에는 container에서 작업한 것을 ec2의 local에 남길 수 있도록 bind mount를 해 주겠다는 말이다(volume을 사용할 수도 있긴 하지만 spring build 결과물인 .jar 파일을 직접 보기 위함이다. 단순 docker image 생성을 위해서는 docker volume을 사용하는 것이 더 좋을 것이다. 왜냐하면 bind mount의 경우에는 여러 container가 동시에 한 directory에서 read/write를 할 경우에는 오류가 생길 수도 있기 때문이다.)

 

다음으로 해당 docker-compose 파일을 실행하자.

$ cd compose
$ docker-compose up -d
$ docker ps
CONTAINER ID   IMAGE                 COMMAND                  CREATED         STATUS         PORTS                               NAMES
25fde056e42c   jenkins/jenkins:lts   "/sbin/tini -- /usr/…"   7 seconds ago   Up 6 seconds   50000/tcp, 0.0.0.0:8081->8080/tcp   jenkins-compose
$ docker images
REPOSITORY        TAG       IMAGE ID       CREATED       SIZE
jenkins/jenkins   lts       22bfa28ae34c   2 weeks ago   572MB

 

해당 container가 실행 중인 것을 볼 수 있다. 보면 외부 포트 8081번을 내부 8080/tcp로 바꾸어 준다는 port가 보인다. 그러면 jenkins로 들어가 보자.

 

EC2 IPv4 public 주소

EC2의 public IPv4 주소를 확인하자. 나의 경우에는 3.137.180.8이다. jenkins 포트는 8081로 지정했으니 3.137.180.8:8081을 주소창에 입력해 보자.

 

비밀번호를 입력하라 그런다.

 

EC2 terminal에서 아래 명령어를 입력해서 비밀번호가 뭔지 보자.

$ docker ps
$ docker logs {CONTINER_ID}

...

*************************************************************
*************************************************************

Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:

a00899eec879436688661d36ebc74d23

This may also be found at: /var/jenkins_home/secrets/initialAdminPassword

*************************************************************
*************************************************************

 

이렇게 나온다. 이 비밀번호를 바로 위의 사진 창에 입력하면 plugin 설치 창으로 간다.

 

 

install suggested plugins를 눌러서 추천하는 plugin을 일단 모조리 깔고 보자.

 

그러면 이런 창이 뜨는데, 대충 입력하자.

 

Jenkins home

그러면 홈화면이 뜬다! Jenkins 관리 - 플러그인 관리 - 설치 가능으로 들어가서 추가로 3개의 plugin을 설치하자.

 

- GitLab Plugin : GItLab에 있는 정보를 받아오기 위함.

- GitLab hook Plugin : GitLab의 hook을 받아오기 위함.

- SSH : docker 위에 올린 jenkins에서 docker로 접근하기 위함.

install without restart를 눌러서 설치하자.

 

 

 


 

 

 

3. Jenkins와 GitLab 연동

 

gitlab과 jenkins를 연동하는 방식은 아래 두가지 방식이 있다.

- gitlab id/pw를 등록하는 방식

- ec2 ssh 공개키/비밀키로 접속

그러나 보안상의 문제로 아래의 방법을 택하려 한다.

 

1) EC2 SSH 키 생성

docker-compose 를 실행한 후에 compose 파일에는 .ssh 폴더가 생성되어 있다. 왜냐하면 docker-compose에서 binding mount를 compose/.ssh로 생성했기 때문이다. 이 .ssh 폴더에서 ssh keygen을 할 것이다.

 

/home/ec2-user/compose/.ssh

ssh-keygen

 

그러면 home/ec2-user/.ssh에 id_rsa, id_rsa.pub 2개의 파일이 생성된다.

 

2) GitLab에서 SSH 키, webhook 등록

앞에서 생성했던 2개 파일 중 id_rsa.pub를 열어서 복사하자. 이후 gitlab으로 들어가자.

 

project - settings - repository

project - settings - repository로 들어가자.

 

deploy key를 누르자.

 

key 생성

이름은 대충 아무렇게나 두고, 아까 복사했던 id_rsa.pub 파일을 복사해서 넣자.

 

3) Jenkins에 Credential SSH 키 등록

다음으로 id_rsa에 있는 내용을 복사해서 jenkins로 가보자.

id_rsa 키 복사

 

jenkins 관리 - manage credentials - global - add credentials - ssh username with private key

jenkins 관리 - manage credentials

 

global

 

add credentials

add credential을 누르자.

 

ssh username with private key

이후에 입력은 다음을 따라간다.

 

값 입력

 

id, username은 아무렇게나, private key는 아까 복사한 id_rsa 내부 값을 복사한다.

 

 

 

4) Gradle 버전 설정

springboot를 사용하기 때문에 gradle 버전을 설정해 주어야 한다. 내 로컬에서 gradle 버전은 6.9를 사용하기 때문에 6.9에 해당하는 gradle 버전을 저장하자.

 

jenkins 설정 - global tool configuration

 

이름, gradle 버전 작성 후 save

 

5) gitlab webhook 등록

gitlab webhook 등록

gitlab settings - webhook으로 들어가서 url을 작성하자.

url은 아래와 같은 양식을 따른다. 맨 마지막 /는 붙여 주어야 한다.

http://{jenkins 주소}/github-webhook/
http://3.137.180.8:8081/github-webhook/

 

add webhook하고, 하단으로 내려 test - push event를 눌러보면 잘 실행되었다는 결과가 나올 것이다. 만약 잘 되지 않는다면 다음 게시글을 참고하자. 나는 잘 되지 않아서 다른 방식을 사용했다.

 

'DevOps > Tutorial' 카테고리의 다른 글

EC2 Docker Jenkins Spring Gitlab 자동 빌드 - 5. jenkins pipeline - JUnit + SonarQube  (0) 2022.10.05
EC2 Docker Jenkins Spring Gitlab 자동 빌드 - 4. docker image push  (0) 2022.10.04
EC2 Docker Jenkins Spring Gitlab 자동 빌드 - 3. gitlab project hooker 연동  (0) 2022.10.04
EC2 Docker Jenkins Spring Gitlab 자동 빌드 - 1. EC2 instance 생성 및 VS Code SSH 접속  (0) 2022.10.04
Docker + (Spring Boot + VS Code) 준비 단계  (0) 2022.06.21
    hyelie
    hyelie

    티스토리툴바