Jenkins 설치 및 노드 추가 방법
우분투에서 Jenkins 설치 방법을 설명드립니다. Master 노드와 Slave 노드를 추가하는 방법을 설명드리고, 도메인으로 Jenkins에 접속 할 수 있도록 웹 서버 등을 설정하는 방법을 추가적으로 설명드립니다.

Jenkins 소개 및 환경
젠킨스는 소프트웨어 개발 시 지속적 통합 서비스를 제공하는 툴입니다. Git 또는 Subversion 등을 기반으로 다양한 프로젝트를 통합 할 수 있으며, 빌드하여 테스트 등을 수행 할 수 있는 툴입니다. Jenkins는 우분투 18.04 버전을 기준으로 설명드리며, 우분투 16.04 버전에서도 함께 테스트 되었습니다.
Jenkins 설치
Jenkins 설치 및 실행 방법은 어렵지 않습니다. 먼저 시스템에 Java가 설치되어 있지 않다면 먼저 설치해 주시기 바랍니다.
$ sudo apt install openjdk-8-jdk
그리고 아래 페이지에서 war 형태의 Jenkins 파일을 다운로드 받은 뒤에, 실행해 주시면 됩니다.
$ wget "http://mirrors.jenkins.io/war-stable/latest/jenkins.war"
$ java -jar jenkins.war --httpPort=8080
처음으로 Jenkins를 실행되면 초기화 되게 되는데, 초기화 과정중에서 아래와 같은 내용이 나타날 것입니다.
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:
1e562e22493a4ddb80287d49d6522e03
This may also be found at: /home/ubuntu/.jenkins/secrets/initialAdminPassword
위에서 생성된 임시 패스워드를 메모해 두시기바랍니다.
웹서버 설정
웹 서버 설정은 필수 사항이 아닙니다. 도메인으로 구분하여 접속 하는 방법을 설명드기 위한 내용으로, 필요하지 않은 경우 이 단계를 건너 뛰어서 진행해 주시기 바랍니다. 도메인으로 접속하고자 하시는 분들은 Apache 웹서버가 설치되지 않았을 경우 먼저 웹 서버를 설치해 주시기 바랍니다.
$ sudo apt install apache2
그리고 Proxy 설정에 필요한 모듈들을 활성화 합니다.
$ sudo a2enmod ssl
$ sudo a2enmod proxy
$ sudo a2enmod proxy_html
$ sudo a2enmod proxy_http
$ sudo a2enmod rewrite
$ sudo a2enmod headers
마지막으로 아래와 같이 아파치 설정 파일을 생성한 뒤에 웹 서버 데몬을 재실행 합니다.
<VirtualHost *:443>
ServerName hiseon.me
SSLEngine on
SSLCertificateKeyFile /etc/ssl/star.hiseon.me/STAR_hiseon_me.key
SSLCertificateFile /etc/ssl/star.hiseon.me/STAR_hiseon_me.crt
SSLCACertificateFile /etc/ssl/star.hiseon.me/STAR_hiseon_me.ca-bundle
ProxyRequests Off
ProxyPreserveHost On
AllowEncodedSlashes NoDecode
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Port "443"
ProxyPass / http://localhost:8080/ nocanon
ProxyPassReverse / http://localhost:8080/
</VirtualHost>
<VirtualHost *:80>
ServerName hiseon.me
Redirect / https://hiseon.me/
</VirtualHost>
$ sudo service apache2 restart
위의 설정은 SSL 인증서로 HTTPS로 접속 할 수 있도록 설정하는 내용입니다. 이와 관련된 자세한 내용은 아래의 글을 참고해 주시기 바랍니다.
Jenkins 설정
웹 서버를 설정하셨다면, 위에서 설정한 도메인으로 접속 해주시고 도메인을 설정하지 않으셨다면 아래 페이지로 직접 방문하시면 됩니다.

위의 페이지에 방문하시면 Jenkins웹 UI를 확인 할 수 있습니다. 처음 Jenkins 에 접속하실 경우, 인증 후 관리자 정보를 입력해 주셔야 합니다. 먼저 위의 초기화 과정에서 메모해 주신 패스워드를 입력하시거나, 아래 파일에 기록된 동일한 패스워드를 입력해 줍니다.
/home/ubuntu/.jenkins/secrets/initialAdminPassword
그 다음, 필요한 플러그인 종류를 선택하신 뒤에 관리자 계정 정보를 입력해 주시면 됩니다.
혹시 Jenkins 설정 후 Jenkins 관리 페이지에서 [역방향 프록시 설정이 잘못된 것으로 파악되었습니다.] 라는 경고 메세지가 나타날 경우 Proxy 설정이 올바르지 않거나, 관리자 설정 페이지에서 지정된 Jenkins URL 과 도메인 정보와 일치 하지 않는 경우입니다. 함께 확인 해 주시기 바랍니다.
Slave 노드 추가
지금까지 Jenkins의 Master 노드 설정이 완료되었습니다. 여기까지 설정 후 시스템을 사용하셔도 되지만 Slave 노드를 추가하는 방법에 대해서 함께 설명 드리도록 하겠습니다.
추가하고자 하는 Slave 노드에서 Java를 설치합니다. 그리고 Master 노드의 공개키 ~/.ssh/id_rsa.pub 내용을 다음 명령어를 이용하여 Slave 노드의 ~/.ssh/authorized_keys 파일에 추가합니다.
$ cat >> ~/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCvoiuOi1e/xdMTtGZlelKoq+XIQldNjSoaMXWCdzHrz/0q/VW4c5VpTYtG7kRw0c4kbZdmKhZ/CGSQkD07DaO+ztYaaeM5src7IOFL1uesa083HupYhnKMceszjBZY+lnZZVBeQ/JLoCvpCc+un3G0AP+uEkpRVAdG2V/6LkflKYOVMNgSW16z4kRYGdAtRQLV7YrsHE46BsYoGiUqC8YNr9x0AiUnhZZEGSkuFYnLm4ug3fNm4hWocKyYG7i9MnxhXjRfSD5jaimFJADZZzDFW7hHmH3J9KzJa52i98pVD14IicLsZ62H+kWrQgSlmC/y6tyz6vwUkBwtp5tBjcGj
위의 명령어로 Master 노드의 공개키 ~/.ssh/id_rsa.pub 내용을 입력 한 뒤에 Ctrl + C 버튼을 입력하면 내용 추가가 완료됩니다. ssh 인증 매커니즘 및 key 정보로 접속 할 수 있도록 설정하는 방법은 아래의 글을 참고해 주시기 바랍니다.
Slave 노드 추가를 위해서 [Jenkins 관리] – [노드관리] 페이지에 접속합니다. 그 다음 [신규 노드] 메뉴를 선택하여 Agent 정보를 아래의 내용과 같이 추가합니다. Remote root directory 에 해당되는 디렉토리는 먼저 Slave 노드에서 생성해 주셔야 합니다.
- Remote root directory : /data/jenkins
- Launch method : Launch slave agents via SSH
- Host : Slave 호스트
- Credentials : [Add] 버튼을 클릭한다음 추가
- Host Key Verification Strategy : Known hosts file Verification Strategy
Add Credentials 팝업에서 추가해야될 내용은 다음과 같습니다.
- Kind : SSH Username with private key
- Username : 사용자명
- Private Key : Master 노드의 ~/.ssh/id_rsa 파일 전체 내용
위의 정보를 저장하면 Master 노드에서 Jenkins의 Slave Agent 노드를 실행시키는 명령어를 자동으로 실행시키게 됩니다. 노드 정보가 추가된 화면은 다음과 같습니다.

노드 관리화면에서 추가된 Slave 노드를 선택하시고, 로그를 확인합니다. 아래와 같은 노드 정보가 나타나면, 성공적으로 설정이 이뤄진 것입니다.
[08/24/18 08:05:59] [SSH] Checking java version of java
[08/24/18 08:05:59] [SSH] java -version returned 1.8.0_181.
[08/24/18 08:05:59] [SSH] Starting sftp client.
[08/24/18 08:05:59] [SSH] Copying latest slave.jar...
[08/24/18 08:05:59] [SSH] Copied 775,665 bytes.
Expanded the channel window size to 4MB
[08/24/18 08:05:59] [SSH] Starting slave process: cd "/data/jenkins" && java -jar slave.jar
<===[JENKINS REMOTING CAPACITY]===>channel started
Remoting version: 3.21.1
This is a Unix agent
Evacuated stdout
Agent successfully connected and online
( 본문 인용시 출처를 밝혀 주시면 감사하겠습니다.)