[CI/CD] Jenkins + Docker + Gitlab 연동

[CI/CD] Jenkins + Docker + Gitlab 연동

Docker 설치

https://docs.docker.com/get-docker/

OS에 맞는 도커를 설치한다. 설치 후 Docker Desktop 바로 실행이 안 되면 재부팅 한 번 해야 한다.

도커 버전 확인해서 잘 설치되었는지 체크하기

docker --version

Docker 설치 확인

Docker hub

회원가입도 하고 젠킨스 이미지도 다운받을 거다.

https://hub.docker.com/

Docker Desktop을 실행하고, Docker hub 계정으로 미리 로그인해 준다.

Docker hub에 jenkins를 검색하면 젠킨스 컨테이너가 주루룩 뜬다.

젠킨스 이미지를 다운 받아야 하는데, official image 딱지가 붙은 건 더 이상 사용하지 않는 DEPRECATED가 붙어 있다.

현재는 jenkins/jenkins로 받아야 한다.

cmd에 다음 두 명령어 중 하나를 골라서 입력해 준다.

첫번째는 21.12.12 현재 기준 jdk11로 설치되고, 두 번째는 jdk8로 설치된다.

추후 jenkins에서 gitlab용 ruby-runtime 플러그인을 설치해야 한다면 jdk8로 설치해야 한다.

docker pull jenkins/jenkins:lts docker pull jenkins/jenkins:lts-jdk8

두번째 걸로 이미지를 받고, 도커 컨테이너를 생성해서 실행해 준다.

docker run -d -u root -p 9090:8080 --name=jenkins jenkins/jenkins:lts-jdk8

name은 jenkins, port는 9090으로 잡았다.

Docker Desktop

Docker Desktop으로 가보면 다음과 같이 jenkins container가 실행되는 걸 볼 수 있다.

여기서 해당 컨테이너의 cli를 띄우거나 log를 확인할 수 있다. 브라우저로 직통연결되는 버튼도 여기 있음.

해당 포트의 localhost로 접속하면 admin비밀번호를 입력하라고 뜬다.

비밀번호는 Docker Desktop에서 컨테이너를 클릭하면 뜨는 로그 창에서 확인할 수 있다.

cmd 창에서도 로그를 확인할 수 있다.

docker logs jenkins

파란색 부분에 있는 비밀번호를 복사해다가 넣어 준다.

recommend plugin을 설치할 거냐 직접 고를 거냐 물어보는데 일단은 추천하는 플러그인만 설치해 준다.

그러면 컨테이너를 열어 준 9090포트로 접속했을 때 젠킨스 페이지가 잘 열린다.

pipeline_test는 좀 이따 추가할 거임 첨엔 암것도 안 뜬다

나중에 로그인할 때는 사용자 이름에 admin치고 방금 친 그 비밀번호 쳐 주면 로그인할 수 있다.

그게 싫다면 처음 로그인할 때 따로 계정을 만들어 놓거나 http://localhost:9090/securityRealm/ 에서 사용자 생성으로 새 계정을 만들어 주면 됨.

Plugin

젠킨스에서 gitlab과 blueocean, nodejs 관련 플러그인을 추가로 설치해 준다.

http://localhost:9090/pluginManager/available

그냥 gitlab이랑 blueocean, nodejs를 각각 검색해서 전부 설치해 준다.

Jenkins와 gitlab 연동

연동을 위해서는 gitlab에서 personal access token을 발급받을 필요가 있다.

사용하는 gitlab의 profile > access token으로 들어가서 새 토큰을 발급받는다.

scope는 api만 해도 충분히 돌아간다. 난 더 해줌.

token을 복사해서 잘 간직해 둔다.

http://localhost:9090/configure

다시 젠킨스로 돌아와서 gitlab을 세팅해준다.

원래는 더 위에 있는 gitlab에 쓰는 게 맞는 것 같은데 거기다 썼더니 testConnection이 ERROR밖에 안 떠서 server단에 세팅함.

server url은 gitlab주소를 적어주면 되고, credential의 경우 add 버튼을 누르면 인증을 등록할 수 있는 창이 뜬다.

Credential Provider

Kind는 Gitlab Personal Access Token으로 잡아 주고, Token에는 아까 gitlab에서 발급받은 access token을 복붙한다.

ID에는 gitlab 계정을 적어주면 된다.

Add를 눌러 등록하면 드롭다운에서 해당 credential을 선택할 수 있다.

TestConnection을 눌러서 제대로 연결되는 걸 확인한 다음 저장 버튼을 눌러 준다.

Test connection: Credentials verified

그리고 깃랩 토큰발급 화면으로 가 보면 해당 토큰이 방금 사용되었다는 표시가 떠 있다.

Nginx 설치, Docker 연동

Docker로 Nginx 정적 웹서버를 설치해 줘야 함.

먼저 편한 곳에 배포파일이 들어갈 폴더인 dist를 적당히 생성해 준다. vue 빌드하면 생기는 dist폴더를 그냥 써도 된다.

docker run --name nginx -d -p 80:80 -v ${dist폴더 절대경로}:/usr/share/nginx/html nginx

무조건 절대경로로 적어줘야 한다. 상대경로로 적으면 dist폴더를 제대로 인식하지 못한다.

이미지 없으면 알아서 pull해 온다.

설치가 끝나면 Docker Desktop에서 nginx 컨테이너를 확인할 수 있다.

9090포트에서는 jenkins가, 80포트에서는 nginx가 돈다.

dist 폴더에 index.html파일이 존재하지 않았다면 nginx 기본 페이지가 뜬다.

http://localhost:80

docker cli로 docker 안에 들어가서 usr/share/nginx/html 경로로 타고 가면 있는 html파일 내용이 뜬다.

근데 만약 dist 폴더 안에 우리가 만든 index.html이 존재했다면, 다음과 같이 우리가 만든 index.html이 뜬다.

http://localhost:80

여기까지하면 연동은 다 됐다...

from http://butfound.tistory.com/26 by ccl(A) rewrite - 2021-12-22 00:26:33