0 Jenkins | 설정

Choi jeongmin·2024년 12월 4일
0

Jenkins

목록 보기
1/2
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
  • github가 젠킨스 서버를 찾을 수 있게 젠킨스서버를 포트포워딩해줌

로컬로 띄운 젠킨스 페이지

  • 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

  1. kind: secret file / application-db.yml 첨부 / id 파일명과 똑같이 ! -> id 기준으로 찾음
  2. id:dockerhub_id / Username/password-> dockerhub 아이디 비번
  3. Username:github 아이디/password:github 토큰 / id:jeongmin_github_token
    • Github Settings - Developer Settings - Tokens 발급
  • DasheBoard - new Item - pipeline
  • General
  1. 설명: 해당 파이프라인에 대한 설명
  2. Do not allow concurrent builds : 순차적으로 빌드
  3. Do not allow the pipeline to resume if the controller restarts : 중단된 위치에서 재개하지 않게 -> 처음부터 다시 시작
  4. github project : 만든 깃헙 레파지토리 주소
  5. Pipeline speed/durability override : 속도 최적화 (빠르게하면 문제 시 대처를 못함)
  6. Throttle builds : 빌드의 병렬 실행 (한번에 여러개 실행하지 못하도록 / 1로 해두면 한개만 가능)
  7. 오래된 빌드 삭제 : 빌드 이력 유지 기간(일) 15 /보관할 최대갯수 7
  8. Build Trigger : GitHub hook trigger for GITScm polling (깃허브에 등록한 웹훅)
  • Pipeline

Pipeline



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'
        }
    }
    
}
  • 변수를 써야하는 경우 "" 사용
  • if문 쓰려면 sh ''' ''' 안에 사용하고 fi 로 마침
  • if문 [ ]에 처음,마지막에 띄워쓰기 필수
  • cp 는 copy

0개의 댓글