Jenkins 설치 및 환경구성
- 설치환경
- RHEL 7.4
- 참고자료: How To Install Jenkins on Ubuntu 16.04
JDK 설치
Gradle 설치
사용자 추가 및 권한 설정
- 사용자 추가
# useradd jenkins -m -d /home/jenkins # passwd jenkins
- sudoer 등록
# visudo
- gradle profile 추가
$ su - jenkins $ vi ./.bashrc ## gradle PATH="/opt/gradle/gradle-4.0.2/bin:$PATH" $ source ./.bashrc
- 사용자 추가
Jenkins 설치(jenkins로 로그인 후 진행)
- 레파지토리 등록
$ sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo
- Key Import
$ sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
- Jenkins 설치
$ sudo yum install -y jenkins
- 레파지토리 등록
Jenkins 시작
- 포트변경
$ sudo vi /etc/sysconfig/jenkins // port 부분을 변경. HTTP_PORT=8080 -> HTTP_PORT=7000
- systemctl을 사용하여 Jenkins 시작
$ sudo systemctl start jenkins
- status 확인
$ sudo systemctl status jenkins jenkins.service - LSB: Start Jenkins at boot time Loaded: loaded (/etc/init.d/jenkins; bad; vendor preset: enabled) Active: active (exited) since Fri 2017-07-07 09:47:29 KST; 2min 1s ago Docs: man:systemd-sysv-generator(8)
- 포트변경
방화벽 오픈
- 방화벽포트오픈 - Jenkins 참조
- 방화벽 재시작
$ sudo firewall-cmd --reload
- 방화벽 확인
$ sudo iptables -L --line-numbers
Jenkins 기본 설정
- Jenkins 접속
http://ip_address_or_domain_name:7000
관리자 비번 입력 후 Unlock Jenkins
$ sudo cat /var/lib/jenkins/secrets/initialAdminPassword
"Install suggested plusins" 선택
관리자 계정 생성 - 정보 입력 후 "Save and Finish"
"Start using Jenkins"
- Jenkins 접속
Jenkins - Gitlab 연동
참고문서
GitLab 설정
- 사용자 계정과 access token 생성
- 사용자 계정과 access token 생성
Jenkins 설정
Global Tool Configuration 설정
플러그인 설치
GitLab 접근을 위한 credential 생성 Jenkins CI 가 build status를 GitLab API로 보내기 위한 설정 GibLab에서 생성한 사용자 access token을 등록
GitLab connection 설정
Jenkins Build Job 생성 GitLab의 mgerge request 를 처리할 job 생성: "ham-build"
폴더 생성
폴더 하위에 pipeline job 생성
build triggers 섹션
- "Build when a change is pushed to GitLab CI.." 체크
- "Advenced.." 에 key generate..
위 URL과 generated 된 Secret token으로 GitLab에서 Jenkins Webhook 생성해야함
Pipeline 섹션
- Definition 에 "Pipeline script fro SCM" 선택
- SCM에 git 선택
- Repository URL에 git project 주소 입력
Credential 에 GitLab에 API Token 생성 하여 입력 해야 되는데 add 가 안되는 현상이 있음. 임시로 credential을 gitlab user/password form으로 생성하여 임시조치
- Branch에 master -> release로 변경
Script Path: Jenkinsfile -> 소스에 Jenkinsfile 을 생성해여 소스레벨에서 배포스크립트를 관리하는 방식으로 진행
#!/usr/bin/env groovy node { stage('checkout') { checkout scm } gitlabCommitStatus('build') { stage('check java') { sh "java -version" } stage('clean') { sh "chmod +x gradlew" sh "./gradlew clean --no-daemon" } stage('npm install') { sh "./gradlew npmInstall -PnodeInstall --no-daemon" } stage('backend tests') { try { // sh "./gradlew test -PnodeInstall --no-daemon" } catch(err) { throw err } finally { // junit '**/build/**/TEST-*.xml' } } stage('frontend tests') { try { // sh "./gradlew npm_test -PnodeInstall --no-daemon" } catch(err) { throw err } finally { // junit '**/build/test-results/karma/TESTS-*.xml' } } stage('packaging') { // sh "./gradlew bootRepackage -x test -Pprod -PnodeInstall --no-daemon" sh "./gradlew bootRepackage -Pdev -PnodeInstall --no-daemon" archiveArtifacts artifacts: '**/build/libs/*.war', fingerprint: true } } }
GibLab Webhook 생성 및 테스트
- GitLab Project > Setting > Integration
- Pipeline Job 생성 단계의 URL과 generated Secret token 복사/붙여넣기
- 트리거에 Merge Request events 체크 (Merge Request시에만 Jenkins build)
연동테스트
Release용 브랜치 생성
Master 브랜치에 변경배용 push 후 master -> release Merge Request 생성
Jenkins에서 Pipeline Job 수행 되는지 확인
Jenkins Slave 구성
- 설치환경
- RHEL 7.4
- 참고자료: Add linux slave node in the Jenkins
- JDK 설치
Gradle 설치
사용자 추가 및 권한 설정
- 사용자 추가
# useradd jenkins -m -d /home/jenkins # passwd jenkins
- sudoer 등록
# visudo
- gradle profile 추가
$ su - jenkins $ vi ./.bashrc ## gradle PATH="/opt/gradle/gradle-4.0.2/bin:$PATH" $ source ./.bashrc
- 사용자 추가
- SSH Key 생성(마스터서버에 jenkins 계정으로 수행)
- SSH Key 생성
$ cd $ ssh-keygen -t rsa $ (passphrase는 입력 없이 엔터) $ ls .ssh
- SSH Key 생성
- Public Key를 Slave 노드에 복사
- ssh key copy
$ ssh-copy-id jenkins@app서버ip
- ssh key copy
Jenkins Master 관리화면에서 Slave 노드 추가
- Jenkins Master 노드에 관리자로 로그인
Jenkins > Manage Jenkins > Manage Nodes 클릭
New Node 클릭
Node 명 입력, Permanent Agent 선택 후 OK
Credentials > ADD 아래정보 입력 후 추가
Slave Node 정보 입력 후 Save
Slave Node 로그 확인
접속 성공 확인
- Jenkinsfile 의 node 절에 slave 노드 지정
node('slave02') { stage('checkout') { checkout scm }