Jenkins CI 구축
GitHub에 Webhook 설정
-
GitHub에 webhook 등록
-
repo에
Settings-Hooks에서Add webhook으로 추가
-
Payload URL에
$JENKINS_BASE_URL/github-webhook/을 입력한다.
(URL은 반드시 슬래시(/)로 끝나야 한다)
-
-
webhook을 호출할 이벤트를 선택한다.
여기서는 remote에 push 이벤트를 받기위해
Pushes만 선택하였다.
-
Jenkins에 pipeline 설정
-
Jenkins에 GitHub plugin 설치
-
Jenkins에 실행시킬 pipeline을 추가한다.
-
webhook을 받기 위한 repo를
General에GitHub project-Project url에 추가해준다.
-
해당 작업를 실행시키기 위해
Build Triggers설정을 한다.
Example 1. Webhook 설정 관련 경고Project url설정을 한 뒤에 아래와 같이 트리거 설정에 경고문이 추가되었다.
아래 링크를 통해 자세한 에러 메시지를 확인할 수 있다.
There are no credentials with admin access to manage hooks on GitHubRepositoryName위와 같은 에러 메시지가 나왔는데, 우선 webhook을 받는데는 문제 없으니 다음 스텝을 진행하였다.
-
Pipeline 스크립트 설정
Jenkinsfile 작성법- Declarative Pipeline
-
pipeline: 보다 쉽게 작성 할 수 있게, 커스텀 되어 있음. Groovy-syntax기반 - Groovy 문법을 잘 몰라도 작성 가능 - Scripted Pipeline
-
node: Groovy기반, Declarative보다 효과적으로 많은 기능을 포함하여 작성 가능. 하지만 작성 난이도가 높음 - Groovy 문법을 잘 알아야 함
void setBuildStatus(String message, String state) {
step([
$class: "GitHubCommitStatusSetter",
reposSource: [$class: "ManuallyEnteredRepositorySource", url: "https://github_url/org/your_repo"],
contextSource: [$class: "ManuallyEnteredCommitContextSource", context: "ci/jenkins/build-status"],
errorHandlers: [[$class: "ChangingBuildStatusErrorHandler", result: "UNSTABLE"]],
// 아래 값을 Display URL for Blue Ocean 플러그인 설치 후 활성화 한다.
// statusBackrefSource: [$class: "ManuallyEnteredBackrefSource", backref: "${env.RUN_DISPLAY_URL}"],
statusResultSource: [
$class: "ConditionalStatusResultSource",
results: [
[$class: "AnyBuildResult", message: message, state: state]]
]
]);
}
pipeline {
agent {
docker { image 'openjdk:11' }
}
stages {
stage('Checkout') {
steps {
git branch: 'feature/your_branch',
credentialsId: 'credentials_id',
url: 'git@github_url:org/your_repo.git'
}
}
stage('Environment') {
steps {
sh 'chmod 755 ./gradlew'
sh 'java -version'
sh 'printenv|sort'
}
}
stage('Clean') {
steps {
sh './gradlew clean'
}
}
stage('Test') {
steps {
sh './gradlew test' // unit test
}
}
stage('Build') {
steps {
sh './gradlew build -x test'
}
}
}
post {
success {
setBuildStatus("Build succeeded", "SUCCESS");
}
failure {
setBuildStatus("Build failed", "FAILURE");
}
}
}
참고할 사항
-
Build Now버튼을 통해 한번 실행하여 webhook을 받을 수 있도록 해준다. -
checkout 받은 마지막 브랜치가 설정되고, 이 브랜치에 변경이 없으면 빌드가 실행되지 않는다.
트러블슈팅
GitHub Commit Status Setter 실패
ERROR: [GitHub Commit Status Setter] ...
-
state를 설정하는 계정에 권한이 없어서 발생한 이슈.
-
Settings-Collaborators & teams에서 계정 추가 및 Write 권한 설정
기타 Jenkins 설정
PR 생성시 빌드하기
기존 Github Pull Request Builder Plugin은 deprecated 되었으므로, Github Branch Source Plugin을 사용할 것
블루오션 URL 설정
-
Display URL for Blue Ocean 플러그인 설치
-
설치되면 빌드시에
RUN_DISPLAY_URL,RUN_CHANGES_DISPLAY_URL,JOB_DISPLAY_URL환경변수가 추가된다. -
RUN_DISPLAY_URL환경변수에 블루오션 빌드 결과 화면이므로 이 값을 사용한다.
-
-
setBuildStatus안에 아래 설정 값 추가statusBackrefSource: [$class: "ManuallyEnteredBackrefSource", backref: "${env.RUN_DISPLAY_URL}"],
Jenkins GitHub 서버 설정
|
Webhook을 받으려면 서버 설정 및 |
-
Jenkins에 GitHub plugin 설치
-
Jenkins 설정에서 GitHub Credentials 및 Manage hook 설정을 한다.
-
GitHub 탭안에서
고급을 선택하면Additional action설정이 노출된다. -
Convert login and password to token을 선택하여 Credentials 을 추가한다. (github_url/settings/tokens 에 추가된다)
-
GitHub Server에 등록하려는 서버와 Credentials을 설정한다.
-
GitHub Server에Manage hooks를 체크한다.
-