Jenkins setting

정훈·2023년 4월 30일
0
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 # 부팅 후에도 재시작 
  • 그 후 자기주소 : 7777 들어가면 보임

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
  • Dockerfile
FROM openjdk:8-alpine
ADD target/springbootApp.jar springbootApp.jar
EXPOSE 8085
ENTRYPOINT ["java", "-jar", "springbootApp.jar"]
  • git add
docker run -dp 7979:8085 --name spring junghun8158/~~~
  • Docker image push 를 위한 설정

    • jenkins관리 ⇒ Credentials 여기에 도커허브에 로그인하기위한 크레덴셜을만들꺼다

    • 아까 git 크레덴셜만들어둔 부분에 Domain컬럼에 global 클릭하여 add credentials

      • id = env환경변수값 넣을려고
      • username ,password는 도커 허브 계정
  • 그 후

dockerHubRegistryCredential='docker-cre'
  • ssh 키페어 생성

    • id_rsa : 프라이빗키 (젠킨스 서버에 있으면됨)
    • id_rsa.pub :퍼블릭 키 (퍼블키 같은경우엔
  • 젠킨스 슬랙연동

    • Slack Notification (설치 플러그인)
    • 시스템설정 클릭
    • Slack 찾기
  • ex 워크스페이스 test 생성

  • 앱 에들어가서 jenkins ci 추가

  • 팀 하위 도메인을 workspace 꼭 붙이자 (팀하위도메인은 슬랙에서 추가시 토큰 값과 아이디 값이 나오는데 그걸 넣으면된다 )

   slackSend (color: '#0AC9FF', message: "SUCCESS: Docker Image Push '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (${env.BUILD_URL})")


0개의 댓글