이제 다 왔다.
맨 처음에 파이프라인 빌드 단계를 언급한게 기억이 나는가?
이제 이걸 진행해 보자.
앞장에서 Jenkinsfile 스크립트를 설정한 위치에 파일을 하나 만들고 Jenkinsfile 이라고 이름짓자.
Jenkinsfile 의 구성은 쉽다.
pipeline {
agent any
stages {
stage('1st step') {
steps {
// 원하는 액션들
}
}
stage('2nd step') {
steps {
// 원하는 액션들
}
}
...
}
post {
success {
// 빌드 성공시 액션
}
failure {
// 빌드 실패시 액션
}
always {
// 빌드 성공,실패 여부와 상관없이 항상 수행할 액션
}
}
}
이해가 쏙 되죠?
여기서 각 단계를 설명하는것은 의미가 없을듯 하다.
각자마다 빌드할 코드들이 다를테니 내가 뭘 설명한들 나한테만 유의미할 수 있다.
내 Jenkinsfile 을 붙이는것으로 갈음한다.
더보기
내 Jenkinsfile
난 각 단계단계를 알아보기 쉽게 각 sh 파일로 나누었다.
pipeline {
agent any
stages {
// execute pre-build script
stage('Pre-Build') {
steps {
echo "Previous step before Build!!";
sh 'chmod +x ./jenkins/develop/jenkins_pre_build.sh';
sh './jenkins/develop/jenkins_pre_build.sh';
}
}
// execute build script
stage('Build') {
steps {
echo "Build step!!";
script {
docker.withRegistry('https://registry.hub.docker.com', 'docker-hub-credentials') {
sh 'chmod +x ./jenkins/develop/jenkins_build.sh';
sh './jenkins/develop/jenkins_build.sh';
}
}
}
}
// execute test script
stage('Test') {
steps {
echo "Test step!!";
sh 'chmod +x ./jenkins/develop/jenkins_test.sh';
sh './jenkins/develop/jenkins_test.sh';
}
}
stage('Static Analysis') {
steps {
withSonarQubeEnv('SonarQube-Server') {
echo "SonarQube Analysis step!!";
sh '/opt/sonarscanner/bin/sonar-scanner -X';
}
}
}
// execute post-build script
stage('Post') {
steps {
echo "Post step!!";
script {
// change owner to jenkins for next build
withCredentials([string(credentialsId: 'jenkins-sudo-pass', variable: 'SUDO_PASS')]) {
sh 'echo $SUDO_PASS | sudo -S chown -R jenkins:jenkins api/coverage'
}
}
sh 'chmod +x ./jenkins/develop/jenkins_post_build.sh';
sh './jenkins/develop/jenkins_post_build.sh';
}
}
}
post {
success {
echo 'All of pipeline stop is clear without any error !!'
}
failure {
echo 'The build failed, see console output for detail.'
echo 'We need to do clean up container even after build failed.'
// execute post_build for clean up container
sh 'chmod +x ./jenkins/develop/jenkins_post_build.sh';
sh './jenkins/develop/jenkins_post_build.sh';
}
always {
script {
echo 'Build completed, we do some remained works !!'
// change owner to jenkins for next build
withCredentials([string(credentialsId: 'jenkins-sudo-pass', variable: 'SUDO_PASS')]) {
sh 'echo $SUDO_PASS | sudo -S chown -R jenkins:jenkins .'
}
}
}
}
}
build step 에 docker-hub-credentials 추가된 이유 : 우리는 docker 를 이용해서 프로젝트 개발을 한다. 배포도 docker image 로 한다. 그런데, 이게 무료버전은 6시간에 pull 할 수 있는 이미지 횟수가 200번인가...정해져 있다. 덴당...
그래서 한달에 5달러를 내면 조금 더 많이 할 수 있다. (https://www.docker.com/pricing/)
젠킨스로 docker image 를 생성시키고 pull 하다보니 6시간에 200번은 모자르더라. 그래서 돈냈다. ㅠㅠ
각 단계별로 자세한 사항이 필요하신 분은 댓글 남겨주세요.
아는 범위에서 최대한 자세하게 설명 드릴께요.
'젠킨스 (Jenkins)' 카테고리의 다른 글
5. Pipeline 프로젝트 (0) | 2024.10.29 |
---|---|
6. Pipeline project - pipeline script (0) | 2024.10.29 |
7. Pipeline project - pipeline script from SCM (1/2) (0) | 2024.10.29 |
8. Jenkins Credential (0) | 2024.10.29 |
9. Jenkins AWS Credential (0) | 2024.10.29 |