C:\Users\803-01>docker pull jenkins/jenkins:jdk17
#젠킨스가 루트 권한 주고 도커 소켓을 갖게 하겠다. -> 도커와 젠킨스가 서로 모르는 상태
C:\Users\803-01>docker run -d -p 8080:8080 -p 50001:50001 -u root --privileged -v //var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker --name jenkins jenkins/jenkins:jdk17
localhost
도커컨테이너로 젠킨스 이미지를 띄워서
로컬호스트로 접속해서 젠킨스 컨테이너의 비밀번호 입력 후 왼쪽 기본 설정 설치
계정만들기
계정명: jenkinstest / 이름 : jenkins / 메일(gmail) / 비번
인텔리제이 프로젝트 의존성 spring web / Springboot devtools / mySql / jpa
FROM eclipse-temurin:17
RUN mkdir /opt/app
COPY build/libs/jenkins_test_app-0.0.1-SNAPSHOT.jar /opt/app/test_app.jar
CMD ["java", "-jar", "/opt/app/test_app.jar"]
EXPOSE 8082
DashBoard -> Jenkins 관리-> Plugins -> Avaliable plugins -> docker / docker pipeline
DashBoard -> Tools ->
Gradle (Add gradle - name:gradle)
Docker (Add docker - name:docker / Install automatically/ Add Installer-> download for docker.com)
DashBoard -> Credentials -> global -> add Credentials
pipeline{
agent any
environment{
DOCKER_REGISTRY = 'docker.io'
DOCKER_IMAGE_NAME = 'jeongmin1213/jenkins-test:latest'
DOCKER_CONTAINER_NAME = 'jenkins-test-container'
DOCKER_CREDENTIALS_ID = 'dockerhub_id'
}
tools{
gradle 'gradle'
dockerTool 'docker'
}
stages{
stage('Github Clone'){
steps{
git branch: 'main',
url: 'https://github.com/cjmin-n/jenkins-test-app.git',
credentialsId: 'jeongmin_github_token'
}
}
stage('Download secret.yml File'){
steps{
withCredentials([file(credentialsId:'application-db.yml', variable:'dbConfigFile')]){
script{
sh "cp $dbConfigFile src/main/resources/application-db.yml"
}
}
}
}
stage('Build with Gradle'){
steps{
sh 'gradle build'
}
}
stage('Docker Build and Push'){
steps{
script{
withCredentials([usernamePassword(credentialsId:"$DOCKER_CREDENTIALS_ID", usernameVariable: 'DOCKER_USERNAME', passwordVariable: 'DOCKER_PASSWORD')]){
sh "docker login -u $DOCKER_USERNAME -p $DOCKER_PASSWORD"
sh "docker build -t $DOCKER_IMAGE_NAME -f Dockerfile ."
sh "docker push $DOCKER_IMAGE_NAME"
}
}
}
}
stage('Deploy Docker Container'){
steps{
script{
sh '''
if [ "$(docker ps -q -f name=$DOCKER_CONTAINER_NAME)" ]; then
docker stop $DOCKER_CONTAINER_NAME
docker rm $DOCKER_CONTAINER_NAME
fi
'''
sh "docker run -d -p 8082:8082 --name $DOCKER_CONTAINER_NAME -e ENV_VARIABLE=value $DOCKER_IMAGE_NAME"
}
}
}
}
post{
always{
sh 'docker logout'
}
}
}