apt-get update -y
apt-get install -y openjdk-11-jdk
# 키 설치
wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add -
echo deb http://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list\
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys FCEF32E745F2C3D5
sudo apt-get -y update
sed -i s/JENKINS_PORT=8080/JENKINS_PORT=7777/g /usr/lib/systemd/system/jenkins.service
# /usr/lib/systemd/system/jenkins.service 라는 파일의 JENKINS_PORT=8080을 JENKINS_PORT=7777로 치환
# 변경했으니 리로드하자
systemctl damon-reload
systemctl restart jenkins
systemctl enable jenkins # 부팅 후에도 재시작
cat /var/lib/jenkins/secrets/initialAdminPassword # 비밀번호알아내는방법
그 후 install seggested
자신의 깃헙 포크
maven build 를 위한 플러그인 설치
jenkins 관리 클릭
그 후 젠킨스 restart 하면 로그인창이뜨는데 로그인 하기
global tool configuration 클릭
앞으로 빌드를 하게되면 my_maven이라는 이름을 갖고있는 빌드툴로 빌드를 하게될것
그 후 프로젝트 생성 ⇒ 파이프라인 클릭
깃헙 프로젝트 클릭후 프로젝트 url 작성
GitHub hook trigger for GITScm polling 클릭
pipline script from scm (소스코드를 매니지먼트하는 부분, 파이프라인)
여러가지 절차들을 수행하는게 파이프라인
script path : 젠킨스파일로하겠다.
pipeline {
agent any
// any, none, label, node, docker, dockerfile, kubernetes
tools {
maven 'my_maven' # 아까 등록한 maven
}
stages {
stage('Example') {
steps {
echo 'Hello World'
}
}
}
}
한 후 git push 하고 빌드시작 후 만약에러나면 구성가서 내 레포지토리 확인해보기 없으면 내레포지토리 명시
도커 이미지 만들고 푸쉬
도커 플러그인 설치해야함 (docker pipline 클릭)
pipeline {
agent any
// any, none, label, node, docker, dockerfile, kubernetes
tools {
maven 'my_maven'
}
environment {
gitName = 'jhva'
gitEmail = 'junghun8158@naver.com'
githubCredential = 'git_cre'
dockerHubRegistry = 'junghun8158/자신이미지' # docker pipline을 깔아야한다
}
stages {
stage('Checkout Github') {
steps {
checkout([$class: 'GitSCM', branches: [[name: '*/main']], extensions: [], userRemoteConfigs: [[credentialsId: githubCredential, url: 'https://github.com/jhva/블라블라~.git']]])
}
post {
failure {
echo 'Repository clone failure'
}
success {
echo 'Repository clone success'
}
}
}
stage('Maven Build') {
steps {
sh 'mvn clean install' # maven plugin add 넣어줘야함
}
post {
failure {
echo 'Maven jar build failure'
}
success {
echo 'Maven jar build success'
}
}
}
stage('Docker Image Build') {
steps {
sh "docker build -t ${dockerHubRegistry}:${currentBuild.number} ."
// currentBuild 는 젠킨스의 build번호
sh "docker build -t ${dockerHubRegistry}:latest ."
}
post {
failure {
echo 'Docker image build failure'
}
success {
echo 'Docker image build success'
}
}
}
stage('Docker Image Push') {
steps {
# 도커 허브의 크레덴셜 추가
withDockerRegistry(credentialsId: dockerHubRegistryCredential, url: '') {
sh "docker push ${dockerHubRegistry}:${currentBuild.number}"
sh "docker push ${dockerHubRegistry}:latest"
}
post {
// docker push 가 성공하든 실패하든 로컬의 도커이미지는 삭제.
failure {
echo 'Docker Image Push failure'
sh "docker rmi ${dockerHubRegistry}:${currentBuild.number}"
sh "docker rmi ${dockerHubRegistry}:latest"
}
success {
echo 'Docker Image Push success'
sh "docker rmi ${dockerHubRegistry}:${currentBuild.number}"
sh "docker rmi ${dockerHubRegistry}:latest"
slackSend (color: '#0AC9FF', message: "SUCCESS: Docker Image Push '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (${env.BUILD_URL})")
}
}
}
stage('Docker Container Deploy') {
steps {
sh "docker rm -f spring"
sh "docker run -dp 7979:8085 --name spring ${dockerHubRegistry}:${currentBuild.number}"
}
post {
failure {
echo 'Container Deploy failure'
}
success {
echo 'Container Deploy success'
}
}
}
}
}
# 하지만 이걸 실행하면 권한 오류
root@genkins:/home/kjh/sb_code# usermod -aG docker jenkins
root@genkins:/home/kjh/sb_code# systemctl restart jenkins
FROM openjdk:8-alpine
ADD target/springbootApp.jar springbootApp.jar
EXPOSE 8085
ENTRYPOINT ["java", "-jar", "springbootApp.jar"]
docker run -dp 7979:8085 --name spring junghun8158/~~~
Docker image push 를 위한 설정
jenkins관리 ⇒ Credentials 여기에 도커허브에 로그인하기위한 크레덴셜을만들꺼다
아까 git 크레덴셜만들어둔 부분에 Domain컬럼에 global 클릭하여 add credentials
그 후
dockerHubRegistryCredential='docker-cre'
ssh 키페어 생성
젠킨스 슬랙연동
ex 워크스페이스 test 생성
앱 에들어가서 jenkins ci 추가
팀 하위 도메인을 workspace 꼭 붙이자 (팀하위도메인은 슬랙에서 추가시 토큰 값과 아이디 값이 나오는데 그걸 넣으면된다 )
slackSend (color: '#0AC9FF', message: "SUCCESS: Docker Image Push '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (${env.BUILD_URL})")