local에서 실행되는 프로젝트 생성
이 화면이
http://{배포서버ip}:8080
했을때 나오면된다
1) + 새로운 아이템
을 통해 새 프로잭트 생성
2) name을 작성하고 pipeline
선택하여 생성
맨 밑에 이제 파이프라인 작성이 있다.
pipeline {
environment {
repository = "dockerhubId/projectname" //docker hub id와 repository 이름
DOCKERHUB_CREDENTIALS = credentials('dockerhub') // jenkins에 등록해 놓은 docker hub credentials 이름
dockerImage = ''
}
agent any
tools {
gradle 'gradle' // jenkins gradle 설정한 이름
}
stages {
stage('github Clone') {
steps {
git branch: 'cicd-test', // github branch 이름
credentialsId: '?????', // github credential id
url: 'https://github.com/~~~~~~.git' // github 레포 주소
}
}
stage('BE-Build') {
steps {
sh "./gradlew clean build" // jar파일 빌드
}
}
stage('Building our image') {
steps {
script {
sh "cp /var/jenkins_home/workspace/tdm-backend-deploy/build/libs/tdm-backend-0.0.1-SNAPSHOT.jar /var/jenkins_home/workspace/tdm-backend-deploy/" // jar 파일을 현재 위치로 복사
dockerImage = docker.build repository + ":$BUILD_NUMBER" // 이미지 복사 -> tag에 현제 빌드 번호지정
}
}
}
stage('Login'){
steps{
sh 'echo $DOCKERHUB_CREDENTIALS_PSW | docker login -u $DOCKERHUB_CREDENTIALS_USR --password-stdin' // docker hub 로그인
}
}
stage('Deploy our image') {
steps {
script {
sh 'docker push $repository:$BUILD_NUMBER' //docker push
}
}
}
stage('Cleaning up') {
steps {
sh "docker rmi $repository:$BUILD_NUMBER" // docker image 제거
}
}
stage('BE-Publish on ssh') {
steps{
dir('backend'){
sshPublisher(
publishers: [
sshPublisherDesc(
configName: 'ssh- name', // 배포할 ssh servers 이름 (앞서 jenkins system에 설정한)
transfers: [
sshTransfer(
cleanRemote: false,
excludes: '',
execCommand: 'sh /home/ubuntu/script/deploy.sh $BUILD_NUMBER', // 배포할 이미지의 태그번호로 배포 스크립스 실행
execTimeout: 240000,
flatten: false,
makeEmptyDirs: false,
noDefaultExcludes: false,
patternSeparator: '[, ]+',
remoteDirectory: '/deploy',
remoteDirectorySDF: false,
removePrefix: 'build/libs',
sourceFiles: 'build/libs/*.jar'
)
],
usePromotionTimestamp: false,
useWorkspaceInPromotion: false,
verbose: true
)
]
)
}
}
}
}
이제 젠킨스에서 이 프로젝트의 Dockerfile을 작성하러 가보자
cd /jenkins/jenkins_home/workspace/docker-test
sudo vi Dockerfile
FROM openjdk:17-jdk-slim
ARG JAR_FILE=tdm-backend-0.0.1-SNAPSHOT.jar
COPY ${JAR_FILE} tdm-backend.jar
ENTRYPOINT ["java","-jar","/tdm-backend.jar"]
이제 배포 서버로 접속하여
script 디렉토리를 만들어준다.
도커 설치 잊지 말자
dockerhub를 private으로 할 경우 도커 로그인도 잊지 말자
cd script
sudo vi deploy.sh
chmod +x deploy.sh
echo "이전 컨테이너를 종료합니다."
docker rm -f $(docker ps -aqf "name={프로젝트 이름}")
echo "이전 이미지를 삭제합니다."
docker rmi $(docker images -q --filter "reference={도커허브 아이디}/{도커허브프로젝트}")
echo "이미지를 pull합니다"
docker pull {도커허브 아이디}/{도커허브프로젝트}:$1
docker run -itd -p 8080:8080 --name {프로젝트 이름} {도커허브 아이디}/{도커허브프로젝트}:$1
지금 빌드를 통해 빌드
이 후 해당 프로젝트가 잘 배포되었는지 확인 ![]
잘 읽었습니다..!