
젠킨스 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를 설정한다.
- url: https://github.com/woowacourse-teams/2022-nae-pyeon
- branch: develop
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서버에 전송한다.
- echo : 터미널의 출력 명령어
- echo ‘입력내용’ > 파일명
- 입력내용이 파일명에 저장된다.
PID=$(pgrep -f naepyeon) if [ -n $PID ]; then kill -9 $PID sleep 5 fi export MYSQL_URL="url" export MYSQL_USERNAME="username" export MYSQL_PASSWORD="password" export JWT_SECRET_KEY="내편키" export JWT_EXPIRE_LENGTH="3600000" nohup java -jar -Dspring.profiles.active=deploy naepyeon-0.0.1-SNAPSHOT.jar 2>&1 &
- “를 사용하기 위해 ‘로 감싼다.
- $를 인식하기 위해선 \\$를 사용한다.
- \\n를 사용하여 개행한다.
- echo ‘입력내용’ > 파일명
- scp
- 파일을 전송한다.
- scp 전송할파일명 저장할위치
- deploy.sh와 jar파일을 전송한다.
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명령어가 인증없이 실행할 수 있도록 한다)
'공부 > 프로젝트' 카테고리의 다른 글
restdocs를 사용해보자 (0) | 2022.07.29 |
---|---|
Flyway를 사용하는 이유 (0) | 2022.07.29 |
[지원플랫폼] 플래닝포커를 해보자 (0) | 2022.07.25 |
DB 서버를 연동해보자 (0) | 2022.07.25 |
젠킨스를 적용해보자 (0) | 2022.07.25 |
댓글