Docker 환경에 Jenkins 구축하기
docker로 로컬 환경에 jenkins 구축하기
젠킨스 구축하기
1. jenkins docker 이미지를 다운받고 실행한다.
docker run \
-p 8080:8080 -p 50000:50000 \ # port 설정
-v /home/jenkins/:/var/jenkins_home \ # 설정파일 마운트
--name my-jenkins \ # 이름 설정
jenkins/jenkins # 이미지 네임 (:jdk11를 붙이면 jdk11 이미지로 다운받음)
# /home/jenkins 폴더안에 jenkins 데이터가 저장되며, uid(1000) 유저 권한을 부여해야 한다. (이 경로는 원하는 경로로 변경할 수 있다.)
# uid/gid가 다른지는 내부 컨테이너에서 id 명령어로 확인
chown 1000:1000 /home/jenkins/
2. jenkins 실행 후 화면에 표시되는 비밀키를 복사하고, http://serverip:8080/ 접속시 표시되는 화면에 입력한다.
복사 못했으면 내부 컨테이너의 cat {젠킨스경로}/secrets/initialAdminPassword 를 확인하면 된다.
3. 최초 사용자를 등록하고, 추천 플러그인들을 설치한다.
http://serverip:8080/jenkins/ 와 같이 context path를 지정하려면 아래 옵션을 추가한다.
docker run \
-p 8080:8080 -p 50000:50000 \
-v /home/jenkins/:/var/jenkins_home \
--name my-jenkins \
-e "JENKINS_OPTS=--prefix=/jenkins" \
jenkins/jenkins
4. github 계정 설정 (private 저장소인 경우에만 해당)
Credentials > System > Global credentials > Add Credentials 메뉴 선택
개인키를 만들지 않은 경우 Kind : Username with password 선택 Username, Password : github 로그인 정보 입력
개인키가 있는 경우 Kind : SSH Username with private key 선택 Username : github 계정 Private Key : (Enter directly, Add, 내용 복사)
5. jdk 설정
Global Tool Configuration 페이지
JDK > JDK installations… 클릭
Add JDK 클릭
Name: java8
JAVA_HOME: /usr/local/openjdk-8 입력 (도커 이미지에 포함되어 있다)
Save 클릭
6. 프로젝트 생성
새로운 Item 선택
프로젝트명 입력하고 Free style project 선택
7. General 항목
Github project: 프로젝트 url을 입력하면 바로 이동할 수 있는 링크버튼이 생긴다
소스 코드 관리
Git 을 선택하고 repository url를 입력한다 (git 저장소 주소)
crendentials은 위에서 생성한것을 선택한다
8. 빌드 유발
빌드를 원격으로 유발 (github의 webhook에 이 주소를 입력할 경우 자동빌드하도록 설정할 수 있다)
Build after other projects are built : 다른 프로젝트의 후속으로 자동 빌드되어야할 경우 선택하고 선행 프로젝트명 입력
Build periodically : 주기적으로 빌드되어야할 경우 crontab 형태로 입력
9. Build
-
Invoke top-level Maven targets 선택방식
maven version: maven
goals: clean install 혹은 clean package 등 입력
-
Execute Shell 방식
스크립트 커맨드 입력 ex)
cd xxx ... mvn clean package ... java -jar xxx ...
파이프라인 예시
Pipeline Syntax 덕분에 손쉽게 구성 가능함
직렬/병렬 전부 가능하다. 여러 환경에 동시 또는 순차적 배포해야 할 때 좋다.
// 여러 잡을 순차적으로 처리하는 예시
pipeline {
agent any
parameters {
choice(
name: 'ResourceVersion',
choices: ['one', 'two', 'three'],
description: '선택형 인자1'
)
choice(
name: 'BuildVersion',
choices: ['one2', 'two2', 'three2'],
description: '선택형 인자2'
)
}
stages {
stage('Resource Step') {
steps {
// 잡 이름 TestJob2, 파라미터 매개변수 명 job2Version, 대입되는 매개변수는 선택형인자1인 ResourceVersion
build job: 'TestJob2', parameters: [ string(name: 'job2Version', value: "${params.ResourceVersion}") ]
}
}
stage('Build Step') {
steps {
build job: 'TestJob1', parameters: [ string(name: 'job1Version', value: "${params.BuildVersion}") ]
}
}
}
}