1. 초기 설정
1-1. 왼쪽 상단위 Jenkins 관리 클릭
1-2. System Configuration - 시스템 설정 클릭
1-3. ssh 키가 존재할 시 해당 부분 입력
1-4. 6번에 필요한 configName에 필요한 변수 생성
1-5. 6번에 필요한 deploy.sh 생성
1-6. Security - Credentails 클릭
1-7. Credentails 생성
2. 왼쪽 상단 위 - 새로운 Item 클릭
3. Item 이름 배정 후 'PipeLine' 선택 create
4. 새로 생성한 item 접속 후 - 왼쪽상단 '구성' 버튼 클릭
5. 설정
5-1. 체크
- Do not allow concurrent builds
- Do not allow the pipeline to resume if the controller restarts
5-2. webhook을 받고싶으면 해당 URL 입력
5-3. 매개변수 사용 시 체크
6. PipeLine 입력
6-1. maven 방식 PipeLine
pipeline {
agent any
parameters {
gitParameter branchFilter: 'origin/(.*)', defaultValue: 'main', name: 'BRANCH', type: 'PT_BRANCH', sortMode: 'DESCENDING_SMART'
}
tools {
// Install the Maven version configured as "M3" and add it to the path.
maven "MAVEN-3.9.1"
}
stages {
/*************** 소스코드 Pull And Build ******************/
stage('Git Pull && Build') {
steps {
// Get some code from a GitHub repository
git branch: "${params.BRANCH}", credentialsId:'{credentialsId적기}', url:'{브랜치 적기}'
// Run Maven on a Unix agent.
sh "mvn -Dmaven.test.failure.ignore=true -P prod clean package"
}
}
/*************** TAR 파일 생성******************/
stage('Make Deploy File'){
steps{
script{
//baseline 커맨드를 이용해 war파일명을 가져온다
env.warname = sh (script: 'basename target/*.war .war', returnStdout: true ).trim()
echo env.warname
//war 파일과 config폴더를 묶어서 압축한다.
sh ("mv target/*.war ./")
sh ("tar -czvf ${env.warname}.tar.gz *.war")
sh ("rm -f *.war")
}
}
}
/*************** Pulish Over SSH Plug in 사용 후 배포 ******************/
stage('SSH Transfer To Jenkins-test Server') {
steps([$class: 'BapSshPromotionPublisherPlugin']) {
sshPublisher(
continueOnError: false, failOnError: true,
publishers: [
sshPublisherDesc(
configName: "ssh.jenkins-test",//Jenkins 시스템 정보에 사전 입력한 서버 ID
verbose: true,
transfers: [
sshTransfer(
sourceFiles: "${env.warname}.tar.gz", //전송할 파일
removePrefix: "", //파일에서 삭제할 경로가 있다면 작성
remoteDirectory: "/home/ubuntu/service/deploy/", //배포할 위치
execCommand: "cd /home/ubuntu/service/deploy/ && ./deploy.sh" //원격지에서 실행할 커맨드
)
]
)
]
)
}
}
}
}
6-2. gradle 방식 PipeLine
pipeline{
agent any
parameters {
gitParameter branchFilter: 'origin/(.*)', defaultValue: 'main', name: 'BRANCH', type: 'PT_BRANCH', sortMode: 'DESCENDING_SMART'
}
tools{
gradle 'Gradle_8.1.1'
}
environment{
TARGET_HOST = "{ec2_host적기}"
JAR_NAME = "{jar파일 이름 적기}"
}
stages{
stage('Clone'){
steps {
git credentialsId: '{credentialsId 적기}',
url: '{git url 적기}',
branch: "${params.BRANCH}"
}
post {
failure {
echo 'Repository Clone Failed'
}
success {
echo 'Repository Clone Successed'
}
}
}
stage('Build') {
steps {
sh 'chmod +x gradlew'
sh './gradlew clean bootJar'
sh 'cp ./build/libs/${JAR_NAME} ./'
}
post {
failure {
echo 'Gradle jar build failed'
}
success {
echo 'Gradle jar build successed'
}
}
}
stage('Deploy') {
steps([$class: 'BapSshPromotionPublisherPlugin']) {
sshPublisher(
continueOnError: false, failOnError: true,
publishers: [
sshPublisherDesc(
configName: "ssh.jenkins-test-gradle",//Jenkins 시스템 정보에 사전 입력한 서버 ID
verbose: true,
transfers: [
sshTransfer(
sourceFiles: "${JAR_NAME}" , //전송할 파일
removePrefix: "", //파일에서 삭제할 경로가 있다면 작성
remoteDirectory: "/home/ubuntu/service/deploy/", //배포할 위치
execCommand: "cd /home/ubuntu/service/deploy && ./deploy.sh" //원격지에서 실행할 커맨드
)
]
)
]
)
}
}
}
}