1. svn 프로젝트 가장 상위 폴더에 Jenkinsfile 이라는 파일을 만든다.
2. 파이프라인 코드를 작성한다.
pipeline {
agent any
tools {
maven 'maven-3.6.3'
jdk 'java-1.8'
}
stages {
stage('Checkout') {
steps {
echo 'Checking out from SVN...'
}
}
stage('Build') {
steps {
echo 'Building...'
// Use credentials with username and password
withCredentials([usernamePassword(credentialsId: 'svn',
usernameVariable: 'SVN_USERNAME',
passwordVariable: 'SVN_PASSWORD')]) {
sh '''
svn upgrade
# 빌드 스크립트에 실행 권한 추가
chmod +x ./build.sh
# build.sh 스크립트 실행
./build.sh 8000
'''
// 또는 다른 명령어에서 사용
}
}
}
stage('Test') {
steps {
echo 'Testing...'
// 실제 테스트 명령어 추가
}
}
stage('Deploy') {
steps {
script {
withCredentials([usernamePassword(credentialsId: 'deployserver',
usernameVariable: 'DS_USERNAME',
passwordVariable: 'DS_PASSWORD')]) {
def remote = [:]
remote.name = // 호스트 이름
remote.host = // 호스트 주소
remote.user = DS_USERNAME
remote.password = DS_PASSWORD
remote.allowAnyHosts = true
// ZIP 파일 경로를 변수에 저장
def zipFilePath = sh(script: 'ls /var/lib/jenkins/workspace/pipeline/*.zip', returnStdout: true).trim()
def zipFileName = zipFilePath.tokenize('/').last()
echo "전체 파일 경로: ${zipFilePath}"
echo "파일명: ${zipFileName}"
sh "cp ${zipFilePath} '/home/jenkins_package'"
// ZIP 파일을 원격 서버의 폴더로 업로드
sshPut remote: remote, from: '/home/jenkins_package/'+zipFileName, into: '/home/jenkins_package'
echo "업로드 완료"
}
}
}
}
}
}
이렇게 하면 동적으로 생성된 zip 파일을 sftp 업로드 할 수 있다.
3. Jenkins 셋팅
커밋한 후
Jenkins 에서 새로운 아이템 > pipeline 으로 생성해준다.
Pipeline에서 Definition을 Pipeline script from SCM 으로 하고,
Subversion을 선택한 후
Script Path를 Jenkinsfile으로 하면 된다.
아쉬운 점
배포까지 자동화 하고 싶지만,
보안상 root계정으로는 ssh로 접속할 수 없다.
배포 서버에서 root계정으로 들어가서 배포하는 부분은 수동으로 하게 되었다.
기존에는 1)빌드서버에서 빌드 -> 2)배포서버로 옮김 -> 3)배포서버에서 배포 이런 과정이라면
1), 2) 가 커밋만 하면 자동으로 진행되도록 된 것,,
'Server' 카테고리의 다른 글
[Windows] 특정 포트 사용 프로세스 종료하기 (2) | 2024.08.08 |
---|---|
[Error] No SLF4J providers were found. (0) | 2024.08.06 |
[Jenkins] 빌드로 가는 과정 (0) | 2024.07.30 |
[Jenkins] Linux에 jenkins 설치 2 (0) | 2024.07.29 |
[Jenkins] Linux에 jenkins 설치 (0) | 2024.07.26 |