Skip to content

Latest commit

 

History

History
103 lines (89 loc) · 4.45 KB

4. jenkins를 통한 CI.md

File metadata and controls

103 lines (89 loc) · 4.45 KB

jenkins를 통한 CI

  • 참고로 이전에는 jenkins 서버를 따로두던가 하는 식이었고 지금은 도커로 jenkins를 설치할 계획

1. jenkins 설치

# 도커를 사용해 jenkins 구성 및 도커 소켓 공유
docker run -d -p 8080:8080 --name jenkins -v /home/jenkins:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -u root jenkins/jenkins:lts
  • 여기서 /home/jenkins:/var/jenkins_home : 노드 /home/jenkins와 컨테이너 /var/jenkins_home이 볼륨 공유하도록
  • /var/run/docker.sock:/var/run/docker.sock
    • -> ★ 도커로 젠킨스를 설치한다고했다
    • -> 젠킨스도 내부적으로 또 도커가 필요한데 이를 위해 도커 소캣을 전달하여 이를 공유 : DooD = docker out of docker
    • 도커 -> 젠킨스 -> 도커 ( 도커를 통해 올린 젠킨스가 다시 도커를 컨트롤할 수 있도록 )
    • 이를위해 root유저를 제공한 것 -u root
    • 그리고 비밀번호 어디 적어놔라

Jenkins에도 docker 클라이언트가 필요하므로 도커를 설치하자.

# jenkins에 docker client 설치
docker exec jenkins apt update
docker exec jenkins apt install -y docker.io

2. jenkins 접속

  • 여기선 8080포트로 지정했으니 노드IP:8080
  • 추천 플러그인으로 설치
  • docker pipeline 플러그인 설치
  • image
  • gogs플러그인도 설치 => 이건 설치 후 재시작버튼 클릭으로 설치

3. pipeline 구성

방식 : 이전에 깃허브 코드가 변경되면 자동으로 끌어다가 빌드하는것처럼 똑같이 구성 다만 ★ 여기서는 gogs(깃허브) -> 젠킨스 -> harbor(레지스트리)

  • 새로운 item
  • image
  • 파이프라인 구성
      1. GitHub hook trigger for GITScm polling 체크
      1. 직접 스크립트 구성 vs 깃허브에 있는 jenkinsFile 가져오기(v)
    • image
    • image
    • image
    • image

4. gogs와 jenkins연결

  • 우선 jenkins를 gogs에 연결하기까지는 완료
  • gogs를 jenkins에 연결해야한다
-> 설정
-> webhook
-> gogs
이 후 아래처럼 진행
  • image
  • 참고로 `jenkinsUrl/gogs-webhook/?job=<젠킨스에서 생성한 item이름>

5. jenkinfile 확인

node {
     stage('Clone repository') {
         checkout scm
     }
     stage('Build image') {
         app = docker.build("172.30.5.156/admin/flask-example")
         
     }
     stage('Push image') {
         docker.withRegistry('https://172.30.5.156', 'harbor-cred') {
             app.push("${env.BUILD_NUMBER}")
             app.push("latest")
         }
     }
}

stage('Build image') {
  app = docker.build("172.30.5.156/admin/flask-example")
}

stage('Push image') {
  docker.withRegistry('https://172.30.5.156', 'harbor-cred') 
  {
     app.push("${env.BUILD_NUMBER}")
     app.push("latest")
  }
}

6. harbor credential 생성

  • jnekins가 harbor에 정보를 보내줄 때 접근을 위한 credential = 5번에서 harbor-cred
  • 생성이 필요하다
  • jenkins관리 -> management credentials
  • image
  • 쭉쭉 타고들어가서
  • image
  • image

7. 확인

그럼 gogs ( 깃허브 )에서 코드를 살짝 변경해보면? gogs 코드 변경 -> jenkins가 끌어와서 CI -> harbor에 새로운 image 업로드

  • image
  • image