본문으로 바로가기

최근 Docker에 관한 내용을 학습하면서, 해당 개념을 적용할 수 있는 시연주제를 고민해보았습니다.

그래서 주제로 정한 건 'Docker를 활용한 CI/CD 프로세스 적용기!!!' 였습니다.

Container, Docker 관련 정리 글은 차후에 올리도록 하고 이번 포스팅에서는 실습 위주로 진행하겠습니다.

 

아래 Overview에 나오는 구성도와 같이 적용해보았습니다.

아래 구성도와 마찬가지로 자동 배포 시스템 시나리오를 작성해서 구현해보았습니다.

간단하긴 하지만, 한 번 따라하시면 분명 응용 혹은 발전시키기에 큰 도움이 되실 것 입니다.

 

총 2편의 글로 'Gihub + Jenkins + Docker Hub + Slack 자동 배포 시스템 구축하기' 포스팅을 마무리 짓도록 하겠습니다.

 

# 이번 포스팅의 내용

 

  • Docker 설치 & Jenkins Container 띄워보기
  • Github에서 push할 경우 Jenkins로 빌드 자동화하기

# 관련 포스팅 링크

  • Github + Jenkins + Docker Hub + Slack 자동 배포 시스템 구축하기 - (2)

Overview (구성도)


자동 배포 구조

 

0. 기본 환경 세팅


1. OS : Ubuntu 16.04 (두 개의 VM 공통)

2. 준비사항

    1) github, slack, dockerhub 계정

    2) Ubuntu 16.04로 두 대의 서버 준비

 

 

1. Docker 설치 


(참고 : https://docs.docker.com/install/linux/docker-ce/ubuntu/)

 

1. 다음 명령어를 통해 Ubuntu에서 패키지 인덱스 정보를 업데이트

1
$ sudo apt-get update
 

 

1-1. sudo apt-get update 명령어 입력시 다음과 같은 에러 발생시

1
2
E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?
 

- 해당 에러는 '/var/lib/dpkg/lock' 파일이 존재하면 패키지 및 인덱스 정보를 업데이트 않기 때문에 발생하는 문제입니다.

1
2
$ sudo rm /var/lib/dpkg/lock
$ dpkg --configure -a
 

- 위 명령어로 Ubuntu  패키지를 막는 lock 파일을 삭제한 다음 실제 패키지 작업을 수행하는 dpkg의 문제점을 수정합니다.

 

 

2. Ubuntu의 경우 Docker에서 제공하는 스크립트를 사용해 간단히 설치 가능

1
$ curl -fsSL https://get.docker.com/ | sudo sh
 

 

2. Jenkins 설치


(참고 : https://hub.docker.com/_/jenkins )

 

1. jenkins의 image를 pull 받습니다. (해당 작업은 docker run 작업 수행 시 실행하고자 하는 이미지가 없을 경우 pull 하는 작업이 있어 필요없지만 이해를 위해 넣어놨습니다.)

1
$ docker pull jenkins
 

 

2. container로 띄워진 jenkins의 환경설정, 플러그인, workspace 등의 데이터를 안전하게 host에 저장하기 위한 사전작업을 해줍니다.

host에 저장해 놓을 디렉토리를 생성합니다.

1
2
3
$ mkdir jenkins
$ mkdir jenkins/vol
$ sudo chown 1000 ./jenkins/vol/
 

 

3. jenkins container를 띄우는 작업을 실행합니다.

1
$ docker run  --8080:8080 -50000:50000 -v $PWD/jenkins/vol:/var/jenkins_home --name jenkins jenkins
 

 

4-1.  성공적으로 실행되었을 경우 다음과 같은 화면이 보일겁니다.

 

 

4-2. 이제 성공적으로 jenkins가 띄워졌을 경우 다음 명령어를 통해 처음 jenkins webpage의 초기 admin password를 확인하는 작업이 필요합니다. 아래 명령어를 통해 확인한 비밀번호를 위의 사진의 Admin password 입력란에 넣어줍니다.

1
2
$ docker exec -it jenkins /bin/bash
$ cat /var/jenkins_home/secrets/initialAdminPassword
 

 

5. 다음 화면과 같이 설치를 진행해 주시면 됩니다.

 

6. 설치가 제대로 안되고 넘어갈 경우 해결해줍시다. (아래 링크 참고)

https://medium.com/@jimkang/how-to-start-a-new-jenkins-container-and-update-jenkins-with-docker-cf628aa495e9

6-1. 위 웹페이지 상단에 아래 빨간 네모를 클릭하여 설치가 덜 된 플러그인들을 설치해 줍니다. (click download link)

6-2. 다음 명령어를 통해 아래 링크를 통해 update를 진행해줍니다.

1
2
$ docker exec -0 -it jenkins bash
$ wget http://updates.jenkins-ci.org/download/war/2.164.1/jenkins.war
 

 

3. Github + Jenkins 연동


(참고 : https://yaboong.github.io/jenkins/2018/05/14/github-webhook-jenkins/)

 

1.  Jenkins Plugin 설치 확인

  • Jenkins 관리 > 플러그인 관리 > GitHub Integration Plugin 설치 및 확인

2.  SSH Key Setting

1
2
$ sudo su -/bin/bash jenkins
$ ssh-keygen
 

- 해당 명령어를 입력하면 public keyprivate key가 생성된다.

- 아마 아래와 같이 해당 키가 생성된 곳에 들어가 public key 를 복사합니다.

> Your identification has been saved in /root/.ssh/id_rsa
> Your public key has been saved in /root/.ssh/id_rsa.pub

$ ssh-keygen -t rsa -f /var/lib/jenkins/.ssh/id_rsa_{project_name}형태로 생성하는 것을 추천.

 

3.  GitHub Repository 에 public key를 등록한다.

  • Settings > Deploy Keys > Add deploy key 버튼 클릭

 

4.  GitHub Repository 에 Jenkins Server에 대한 webhook 설정

  • Settings > Webhooks > Add webhook 버튼 클릭

5.  Jenkins Project 생성

  • 새로운 item > 프로젝트명 입력 > Freestyle project 클릭

 

6. 7번 과정에 쓰일 Github Credentials 생성

  • credentials > System > Global credentials (unrestricted) 클릭

 

  • Add Credentials 클릭
  • Kind > SSH Username with private key 선택
  • ID에 Github계정이므로 간단히 작성
  • Private Key에 이전에 생성한 id_rsa 값을 입력한다.
    • cat /root/.ssh/id_rsa 확인

 

7.  Jenkins Project Setting

  • Repository URL을 입력한다.
  • Credentials은 6번 과정에서 생성해 둔 계정을 활용
  • master branch  에 tracking 하도록 설정한다. (코드 변화나 built 될 때)

  • 빌드 유발  > GitHub hook trigger for GITScm polling 선택
    • Github hook trigger될 때 build 된다.

  • Jenkins에서 정상 빌드가 되는지 테스트를 위해 다음과 같이 작성해준다. 

 

8.  테스트

  • Github 위의 설정한 Repository의 master branch에 code가 merge해보자!
  • 왼쪽 아래 Build History쪽을 보면 다음과 같이 파란색 공이 되며 성공한 것을 볼 수 있다.

  • #1을 클릭한 후 > Console Output을 클릭

 

  • Console Output 하단 부분에 다음과 같이 메시지가 뜬 것을 볼 수 있다.

 

첫 번째 포스팅을 마무리 하며...


일단 위의 과정을 통해 정상 빌드된 것까지 확인했는데요~

다음 포스팅에서 맨 위 아키텍쳐에 맞게 추가 작업을 진행하겠습니다.

 

 


댓글을 달아 주세요