Jenkins Pipeline 으로 git clone , build 수행하기
Jenkins Pipeline 으로 CI/CD 를 구축할 때 가장 기본적으로 repository 에서 git 을 clone 하여 build 하는 과정은 반드시 존재한다.
이 과정이 CI (Continuous Integration) 으로 지속적인 통합이라고 할 수 있다.
즉 개발자는 소스코드 개발에만 집중하며 변경사항이 공유 레파지토리에 지속적으로 통합하는 것을 의미한다.
공유 레파지토리에 수정사항이 발생하면 파이프라인은 자동으로 빌드 후 배포까지 수행할 수 있어 개발자는 온전히 소스 코드만 개발할 수 있다는 장점이 있다.
1. Git Clone
그럼 먼저 공유 레파지토리에서 소스를 가져오는 stage 가 필요하다.
공유 저장소가 PUBLIC 권한이라면 상관없겠지만 대부분은 PRIVATE 저장소로 구성되어 있다. 그래서 저장소에 접근할 수 있는 계정을 먼저 Jenkins 의 Credential 로 저장해 놓아야 한다.
파이프라인에서 git 명령을 사용하려면 plugin 이 설치되어 있어야 한다. 그렇지 않으면 DSL 에러가 발생할 것이다.
https://plugins.jenkins.io/git/
해당 주소의 문서에서 참고하면 파이프라인 코드를 쉽게 작성할 수 있다.
def checkout(git_url, credentialsId) {
println "${branch}"
println "${credentialsId}"
println "${git_url}"
def req_branch = "${branch}"
req_branch = req_branch.trim()
checkout poll: false,
changelog: true,
scm: [$class: 'GitSCM',
branches: [[name: req_branch]],
doGenerateSubmoduleConfigurations: false,
extensions: [[$class: 'PruneStaleBranch'],[$class: 'WipeWorkspace']],
submoduleCfg: [],
userRemoteConfigs: [[credentialsId: "${credentialsId}",
url: "${git_url}"]]]
}
git_url, branch, credential 정보를 받아서 수행하는 함수, 원하는 공유 레파지토리의 브랜치를 지정한 credential 로 받아올 수 있다.
추가 옵션으로 PruneStaleBranch (원격에 존재하지 않는 branch 제거), WipeWorkspace (clone 전에 디렉토리 정리) 지정하였다.
2. Build
소스를 가져왔으면 이제 빌드를 수행해야 한다. 빌드 툴이 무엇을 사용하냐에 따라 다를 수 있다. gradle, gardlew, maven, node 등 많은 빌드 툴이 있고 그에 따른 명령어가 다르기 때문에 파이프라인에서 해당 소스 코드의 툴을 지정해줘서 분기를 탈 수 있게 해주어야 한다.
여기서는 gradle 이 장비에 설치되어 있어서 해당 gradle 을 사용한다고 가정한다.
def gradle() {
def gradle_home = //gradle directory
sh "#!/bin/sh -e\n " + "${gradle_home}/gradle clean build" + " --refresh-dependencies"
}
빌드 시에는 정말 다양한 옵션이 추가될 수 있는데 여기서는 gradle clean build --refresh-dependencies 로 빌드한 것이다.
Jenkins 의 파라미터 여부에 따라서 옵션이 추가될 수 있도록 변경할 수 도 있기 때문에 해당 파이프라인이 적용되어야 할 프로젝트에 맞게 저 빌드툴, 빌드 커맨드를 조절해주면 된다.
3. Pipeline Stage
이제 앞서 만든 함수들을 이용해서 파이프라인을 작성해주면 된다. 근데 주의할 점은 gradle 로 빌드하더라도 JAVA 버전이 일치해야 한다.
그래서 파이프라인에서 JAVA Version 까지 지정하여 build Stage 를 작성한다.
이번 편에서는 gradle, jdk17 등 특정 상황에 대한 내용만 있지만 파이프라인과 함수들을 수정하여 분기를 태우면 모든 상황에 대해 대처가 가능한 파이프라인을 생성할 수 있다.
def pipeLine()
{
node {
stage ('code Update') {
git.checkout("git_url", "credential")
}
stage ('build') {
//java17 설정
env.JAVA_HOME = "/usr/lib/jvm/jdk-17"
env.PATH="${env.JAVA_HOME}/bin:${env.PATH}"
sh "java -version"
build.gradle("test")
}
}
}
pipeLine()
git_url, credential 에는 앞서 지정했던 주소와 크레덴셜을 작성해주면 원하는 저장소의 Code 를 clone 할 수 있다.
다음 build stage 에서 jdk 경로, path 설정 후 build 명령을 실행하면 git clone 부터 build 까지의 파이프라인을 작성할 수 있다.
'⇥ DevOps Tech 🙋🏻♀️ > ✏️ Jenkins' 카테고리의 다른 글
Jenkins 에서 빌드한 artifact 를 Ansible 로 넘기는 방법 [nginx file hosting] (1) | 2023.10.16 |
---|---|
AWS CodeBuild Plugin 사용하여 AWS 연동하기 (0) | 2023.10.12 |
Bitbucket 과 AWS CodeCommit Jenkins를 이용한 Mirroring (0) | 2023.10.10 |
Jenkins 와 Ansible Tower (AWX) 연동, API 사용 (0) | 2023.10.10 |
BACKUPSET 을 이용한 JENKINS 복구 방법 (1) | 2022.12.26 |
댓글
이 글 공유하기
다른 글
-
Jenkins 에서 빌드한 artifact 를 Ansible 로 넘기는 방법 [nginx file hosting]
Jenkins 에서 빌드한 artifact 를 Ansible 로 넘기는 방법 [nginx file hosting]
2023.10.16 -
AWS CodeBuild Plugin 사용하여 AWS 연동하기
AWS CodeBuild Plugin 사용하여 AWS 연동하기
2023.10.12 -
Bitbucket 과 AWS CodeCommit Jenkins를 이용한 Mirroring
Bitbucket 과 AWS CodeCommit Jenkins를 이용한 Mirroring
2023.10.10 -
Jenkins 와 Ansible Tower (AWX) 연동, API 사용
Jenkins 와 Ansible Tower (AWX) 연동, API 사용
2023.10.10