젠킨스 pipeline을 적용한 결과
pipeline {
agent any
stages {
stage('Github clone') {
steps{
git branch: 'develop', url: '<https://github.com/woowacourse-teams/2022-nae-pyeon>'
}
}
stage('BE build'){
steps{
dir('backend'){
sh'''
echo build build
./gradlew clean build
'''
}
}
}
stage('Transfer env_setting(deploy.sh) and jar file to WAS'){
steps{
sshagent(credentials: ['aws-naepyeon-key']) {
sh """
echo '내용입력' > /var/jenkins_home/deploy.sh
scp /var/jenkins_home/deploy.sh ubuntu@내편privateIP:/home/ubuntu
scp /var/jenkins_home/workspace/naepyeon-pipeline/backend/build/libs/naepyeon-0.0.1-SNAPSHOT.jar ubuntu@내편privateIP:/home/ubuntu
"""
}
}
}
stage('Execute deploy'){
steps{
sshagent(credentials: ['aws-naepyeon-key']) {
sh """
ssh -o StrictHostKeyChecking=no ubuntu@내편privateIP chmod 777 ./deploy.sh
ssh -o StrictHostKeyChecking=no ubuntu@내편privateIP ./deploy.sh &
"""
}
}
}
}
}
수행과정
1. Github clone
stage('Github clone') {
steps{
git branch: 'develop', url: '<https://github.com/woowacourse-teams/2022-nae-pyeon>'
}
}
- clone할 깃 url과 branch를 설정한다.
2. BE build
stage('BE build'){
steps{
dir('backend'){
sh'''
./gradlew clean build
'''
}
}
}
- 디렉토리 backend에 있는 ./gradlew을 build한다.
- ./gradlew clean build : 빌드된 파일을 지운 후 빌드 실행 (./gradlew build를 실행하면 에러가 발생하기도 한다)
3. Transfer env_setting(deploy.sh) and jar file to WAS
steps{
sshagent(credentials: ['aws-naepyeon-key']) {
sh """
echo '내용입력' > /var/jenkins_home/deploy.sh
scp /var/jenkins_home/deploy.sh ubuntu@내편privateIP:/home/ubuntu
scp /var/jenkins_home/workspace/naepyeon-pipeline/backend/build/libs/naepyeon-0.0.1-SNAPSHOT.jar ubuntu@내편privateIP:/home/ubuntu
"""
}
}
- deploy.sh를 생성한다.
- deploy.sh를 Jenkins서버에서 WAS서버에 전송한다.
- jar를 Jenkins서버에서 WAS서버에 전송한다.
4. Execute deploy
stage('Execute deploy'){
steps{
sshagent(credentials: ['aws-naepyeon-key']) {
sh """
ssh -o StrictHostKeyChecking=no ubuntu@내편privateIP chmod 777 ./deploy.sh
ssh -o StrictHostKeyChecking=no ubuntu@내편privateIP ./deploy.sh &
"""
}
}
}
- chmod를 통해 ./deploy.sh를 실행할 수 있는 권한을 준다.
- deploy.sh를 실행한다.
- ssh접속
- -o : 사용자정의옵션을 제공하는데 사용한다. 호스트별로 지정할 수 있다.
- StrictHostKeyChecking=no : host key checking을 비활성한다.
- ssh를 이용해 원격에 있는 서버에 접근할 때 해당 서버에 대한 인증을 위해 로컬에 저장해둔 키와 서버의 키를 비교하는 작업을 진행한다. (이를 비활성화 하여 ssh명령어가 인증없이 실행할 수 있도록 한다)
댓글