Docker와 Jenkins로 CI / CD 환경 구축하기[3]

안상철·2022년 6월 21일
0

CI / CD

목록 보기
3/8
post-thumbnail

이 문서는 Docker와 git repo가 있어야 진행할 수 있습니다

1. 윈도우 터미널로 Docker를 실행하기

윈도우에서 각종 명령어를 실행할 수 있는 프롬프트는 cmd, power shell이 있지만 여기서는 window terminal이라는 앱으로 실행합니다. 파워쉘에 비해 편리하고 구동 속도가 빠르다고 합니다!

시작버튼을 눌러 → 마이크로 소프트 스토어에서 → Window terminal을 검색해 터미널을 다운받아 줍니다. 저는 이미 설치가 되어있고, 여러분은 설치 후 열기를 눌러주시면 됩니다.

docker pull jenkins/jenkins:lts

2. 젠킨스 이미지를 다운받기

다음은 윈도우 터미널에서 도커 명령어를 입력해 젠킨스 이미지를 받아줍시다.

이미지는 이미지고, 이것을 다시 컨테이너화 해야 사용할 수 있습니다.

$docker images
REPOSITORY        TAG       IMAGE ID       CREATED       SIZE
jenkins/jenkins   lts       fd576e09d155   8 days ago    464MB
nginx             latest    12766a6745ee   2 weeks ago   142MB

docker images 명령어로 이미지가 잘 받아졌는지 확인 한 다음

$ docker run -d -p 8082:8080 -v /jenkins:/var/jenkins_home --name anna_jenkins -u root jenkins/jenkins:lts

// 위 명령어 옵션설명 
-d	detached mode 흔히 말하는 백그라운드 모드
-p	호스트와 컨테이너의 포트를 연결 (포워딩)
-v	호스트와 컨테이너의 디렉토리를 연결 (마운트)
–name	컨테이너 이름 설정
-u 실행할 사용자 지정

맨 마지막 jenkins/jenkins:lts 는 실행할 이미지의 레포지토리 이름이며 만약 이미지가 없을 경우 이미지를 docker hub 에서 땡겨오므로 주의한다.

위 명령어를 사용해 젠킨스를 받아줍시다. 여기서 포트설정은 지금 다른 프로젝트나 툴에서 사용하지 않는 포트번호를 입력 해 줘야 합니다.

저같은 경우

  • 8080은 API
  • 8081은 Google Drive Api
  • 3000은 Front
  • 9000은 SonarQube

를 사용하기 때문에 8082로 설정했습니다. 아무거나 해도 됩니다!

docker ps
CONTAINER ID   IMAGE                 COMMAND                  CREATED              STATUS              PORTS                               NAMES
73cef97f1fab   jenkins/jenkins:lts   "/sbin/tini -- /usr/…"   About a minute ago   Up About a minute   50000/tcp, 0.0.0.0:8082->8080/tcp   anna_jenkins

3. 젠킨스 이미지를 컨테이너화 시키기

다음은 docker ps로 젠킨스가 컨테이너에 잘 올라왔는지 확인 한 다음

docker logs anna_jenkins
###...

docker logs anna_jenkins 명령어로 젠킨스 컨테이너에 접속해 봅니다.
성공하면 secretKey 같은 문자가 아래와 같은 설명과 함께

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

나타나게 되는데, 이 키번호를 아까 우리가 설정했던 포트번호(이 글에서는 8082)에 접속 후 붙여넣기 해 줍니다.

축하합니다! 이제 로컬에서 젠킨스를 실행할 수 있습니다.

첫 로그인을 하면 플러그인 설치 방법을 제안하는데, 좌측 메뉴를 클릭해 추천 플러그인을 모두 받아줍니다. 수 분이 걸릴 수 있습니다.


완료되면 계정정보를 입력하고

이런 화면이 나오면 이제 젠킨스를 사용할 수 있습니다!

추가로, Docker App을 실행해 컨테이너에 들어가 보면

이렇게 젠킨스가 컨테이너에 잘 올라온 것을 확인할 수 있습니다.

추가로 왼쪽 메뉴의 Volume을 누르면 볼륨이 한 개 추가 된 것을 확인할 수 있습니다.

도커에서 볼륨이란 일종의 데이터 저장소를 말하는데,
도커는 다운받은 이미지는 로컬에 저장 해 놓고 사용할 수 있지만 컨테이너를 재 실행 할 때 마다 로컬에 있는 데이터는 모두 초기화 되게 됩니다.

볼륨은 이런 컨테이너에서 생성 된 데이터들을 로컬에 저장 해 놓은 파일이라고 비유할 수 있는데 볼륨파일이 생성되지 않았다면 이미지 다운 ~ 컨테이너 생성을 다시 해 주어야 합니다.(볼륨은 다른 포스팅에서 자세히 다루겠습니다.)

위 사진처럼 볼륨이 생성되었다면 pc를 껐다가 끄던 도커를 끄던 상관없이

로컬 PC에 저장 된 볼륨이 WSL가상 환경에서 돌아가는 도커 → 젠킨스에 알아서 연결되어 실행됩니다.

이것으로 Docker ~ Jenkins의 모든 설정이 끝났습니다.

대략적인 흐름은

이렇게 흘러가게 됩니다. 딱히 아키잡는걸 참조한건 아니니.. 그냥 흐름만 봐주세요.

우린 젠킨스가 빌드 한 프로젝트를

  • API는 Gradle을 통해 JAR파일로 S3 버킷에 업로드(젠킨스로 빌드하면 ZIP파일로 올라갑니다.)
  • Front는 npm으로 빌드한 dist 하위 모든 파일을 S3 버킷에 업로드

한 다음 API는 EB를 통해 EC2에 배포하게 됩니다.

따라서 AWS 환경 구성은 EB 1개, S3는 Front와 API 각각 1개를 준비 해 주시면 되고 EC2는 EB가 알아서 생성 해 주기 때문에 따로 만들 필요는 없습니다.

대신 IAM권한 설정에서 EB와 S3의 CRUD에 대한 FullAccess 권한이 필요합니다.

AWS 환경구성은 아직(22.06.21) 시리즈로 올리지 않아 구글링을... 열심히 해 주시면 감사하겠습니다.

다음 포스팅 부터 Jenkins를 통해 빌드-배포를 진행 해 봅시다.

profile
웹 개발자(FE / BE) anna입니다.

0개의 댓글