jenkins에는 여러 종류의 Job이 있습니다.
가장 많이 쓰이는 것은 Freestyle Project이지만 최근에 간편하게
코드 하나로 CI & CD가 구현이 되는 Pipeline을 사용하였습니다.
Create jenkins pipeline
- Dashboard > new Item 에서 Pipeline 선택 후 이름 지정 (ex : jenkins_pipeline)
- 만든 pipeline에서 Configuration 진입
- GitHub Projcet : your repo -> 이것을 이용해 해당 레포에 푸쉬를 인지
- Pipeline speed/durability override - Perfomance-optimized
- Buil Triggers에
GitHub hook trigger for GITScm polling
선택 - Pipeline script 선택
Write shell Script
Jenkins 파이프라인이 종료되면 해당 파이프라인에서 생성된 모든 프로세스도 함께 종료됩니다. 따라서 nohup
명령어를 사용하여 백그라운드에서 프로세스를 실행하더라도 파이프라인이 종료되면 파이프라인에서 생성한 프로세스도 종료되기 때문에 종료 하고싶지 않은 명령어의 앞에 해당 키워드를 추가합니다.
JENKINS_NODE_COOKIE=dontKillMe
Shell Script의 순서
- github repo를 clone해옵니다.
- gradlew의 실행권한을 얻은후 clean, bootJar로 jar 파일을 만듭니다.
- 기존의 실행중인 프로세스를 종료 후 (없다면 종료 X) 1초 기다립니다.
- repo 최상단에 만들어둔 deploy.sh를 이용해 jar 파일을 실행 시킵니다.
pipeline {
agent any
stages {
stage('github Clone') {
steps {
git credentialsId: '{your credentials id}', url: '{your-repository}.git'
}
}
stage('build') {
steps {
sh '''
echo 'start bootJar'
chmod +x gradlew
./gradlew clean bootJar
echo "Checking for running processes on port 8000"
sudo lsof -t -i:8000 | xargs -r kill -9
sleep 1
chmod +x ./deploy.sh
JENKINS_NODE_COOKIE=dontKillMe ./deploy.sh
'''
}
}
}
}
deploy.sh의 내용은 다음과 같습니다.
nohup java -jar -DServer.port=8000 ./build/libs/demo-0.0.1-SNAPSHOT.jar > nohup.out 2>&1 &
해당 코드는 jar 파일을 nohup
명령어로 백그라운드에서 실행하고, 그 과정에서 발생하는 모든 출력을 nohup.out
파일에 기록한다는 의미입니다.
포트번호와 jar 파일이름은 개인의 환경에 맞게 변경 해야합니다.
'DevOps' 카테고리의 다른 글
[Spring Boot + MySQL] docker-compose 세팅 (1) | 2024.09.02 |
---|---|
minikube service 외부 접속 안되는 이유 (0) | 2024.08.27 |
Nginx에 SSL 붙이고 Reverse Proxy 적용하기 (0) | 2024.07.05 |
Docker에 nginx 컨테이너 올리기 (0) | 2024.03.28 |