1. 플러그인 설치
먼저 필요한 플러그인을 설치해야 한다. 다음 화면에서 보이는 봐와 같이 플러그인 관리로 들어간다.
다음과 같은 플러그인을 설치한다.
1. GitLab Plugin
2. Git Plugin
3. docker plugin
4. docker pipeline plugin
2. Pipeline Job 생성
이제 새로운 Pipeline을 클릭한다.
2-1. Build Triggers
다음과 같이 깃랩에 push 될때 build가 자동으로 이루어지게 설정한다. 이때, GitLab webhhok URL을 기억해 두자! 이후에 GitLab에서 webhook을 등록하기 위해 사용한다.
이때, Build Triggers의 고급 설정을 클릭한다.
다음과 같이 Secret token을 발급받는다.
GitLab에서 Push Event가 발생되면 Jenkin의 Job을 build 하는 webhook을 생성하기 위해서이다.
2-2. GitLab webhook 등록
이제 GitLab에 Settings > Webhooks으로 들어간다.
URL은 위의 Jenkins에서 GitLab webhhok URL을 가져온다.
Secret token은 위에서 발급받았던 것을 사용하면 된다.
Push events는 원하는데로 하면 되는데, 저는 테스트용으로 해보려고 일단 master에 Push 시 Build가 자동으로 이루어지는 것을 보고 싶어 master로 했습니다.
다시 Jenkins로 돌아와서 남은 과정을 진행한다.
3. Pipeline script from SCM
Repository URL에는 Git 주소를 적으면 되며, Credentials는 GitLab에서 token을 받아서 진행하면 된다.
Credentials의 과정은 생략하겠다.
이때, 주의할 점은 Pipeline script from SCM으로 진행하였으므로, GitLab에 미리 Jenkinsfile을 올려놔야 한다.
다음은 GitLab에 미리 올라갈 Jenkinsfile이다.
참고로 나는 gradle 프로젝트를 배포시켰다.
pipeline {
agent any
environment {
registCredential = ""
DOCKERHUB_CREDENTIALS = credentials('docker-key') // jenkins에 등록해 놓은 docker hub credentials 이름
springImg = ""
ver = "0.7.$BUILD_NUMBER"
}
stages {
stage('github clone') {//git clone 받아옴
steps {
checkout scmGit(branches: [[name: '*/master']], extensions: [submodule(parentCredentials: true, reference: '', trackingSubmodules: true)], userRemoteConfigs: [[credentialsId: 'git_access_token', url: '깃주소']])
}
post {
success {
echo 'Seccussfully Cloned Respository'
}
failure {
error 'this pipeline stops here...'
}
}
}
stage('build'){
steps{
dir('backend'){
sh'''
echo build start
chmod +x gradlew
./gradlew clean bootJar
'''
script {
springImg = docker.build registCredential + ":spring$ver"
}
}
}
post {
success {
echo 'jenkins build success OK'
sh 'docker image prune --force'
}
failure {
echo 'jenkins build fail'
}
}
}
stage('stop container'){//기존에 동작하는 container가 있다면 삭제시킨다.
parallel{
stage('stop spring'){
steps {
sh 'docker ps -f name=spring_test -q | xargs --no-run-if-empty docker container stop'
sh 'docker container ls -a -f name=spring_test -q | xargs -r docker container rm'
}
post {
failure {
echo "not exist $springImg"
}
}
}
}
}
stage('deploy'){//배포
steps{
script{
try{
echo 'tink spring create container start'
sh "docker run -d -p 8080:8080 \
--name spring_test \
--rm 이미지이름"
}catch(error){
print(error)
}
}
}
post {
success {
sh 'docker image prune --all --force'
}
}
}
}
}
'Infra' 카테고리의 다른 글
[Jenkins] Jenkins와 Mattermost 알림 연동 (0) | 2023.05.14 |
---|---|
[Docker]Ubuntu 환경에 Docker 설치 (0) | 2023.03.12 |
[SSH] SSH 접속 오류 REMOTE HOST IDENTIFICATION HAS CHANGED! (0) | 2023.03.05 |
[Docker] 리액트 핫로딩(hot reloading)이 안되는 경우 (0) | 2023.02.20 |