컨테이너 인프라 환경(4) 젠킨스 5. 젠킨스 활용 GitOps 구현

InSeok·2023년 3월 4일
1

젠킨스 플러그인을 통해 구현되는 GitOps

  • 젠킨스 플러그인은 사용자에게 필요한 기능을 주로 플러그인 홈페이지에서 검색해 내용을 살펴보고 이를 조합하는 방식을 취한다.
  • GitOps란
    • Git과 Ops(Operations, 운영) 의 합성어
    • 깃을 통해 모든 것을 선언적으로 깃허브 저장소와 같은 scm에 업데이트하면 오퍼레이터(젠킨스와같은 도구)가 변경분을 감지해 대상 시스템에 배포한다.
    • 외부 클러스터에 접근하려면 쿠버설정(파일)을 이용해 외부클러스터의 API 서버로 접근한 다음 오브젝트를 배포해야 하는데, 젠킨스 에이전트 파드에서 쿠버설정 파일을 내려받아 바로 사용하는 것은 보안적으로 문제가 잇다.
    • 쿠버설정 파일을 젠킨스 컨트롤러에서 관리하고 상황에 따라 필요한 권한만을 제공하는 기능을 쿠버네티스용 지속적 배포 플러그인을 상요해서 구현 가능
    • Poll SCM은 변화를 감지하고 변화시에 변경된 부분을 쿠버네티스에 적용한다.

쿠버 설정 파일
쿠버 설정 파일은 쿠버네티스 클러스터에 대한 접근정보가 담겨있는 파일이다.
kubectl 명령어를 사용해서 쿠버네티스의 정보를 조회할 때 사용자 홈 디렉터리 하위의 .kube 디렉터리에 있는 config 파일을 기본적으로 이용한다. 이 파일을 가지고 있으면 파일에 정의된 구너한을 가지고 쿠버네티스 클러스터에 접근 할 수 있다. 쿠버 설정 파일은 쿠버 API 서버 접속 정보 이외에 연결에 필요한 모든 인증 정보를 가지고 있다.

  • kubectl config view 쿠버 설정 파일을 살펴 볼 수 있다.
  • 쿠버네티스용 지속적 배포 플러그인은 쿠버설정 파일을 관리할 수 있게 자격증명 정보를 따로 관리한다.
  • 젠킨스 관리 > Manage Credentails 메뉴 에서 쿠버네티스용 지속적 배포 르러그인이 사용할 새로운 자격증명 정보를 추가하기 위해 (global) 버튼을 누른다.
  • 쿠버설정 파일에 대한 자격 증명을 가져오려면 현재 쿠버설정 파일이 있는 마스터 노드에 접속권한이 있어야한다.
  • Add Credentails를 눌러 마스터 노드에 대한 자격증명을 설정한다.
  • 쿠버 설정 파일에 대한 자격증명 도 추가한다.
    • kind
      • 쿠버네티스용 지속적 배포 플러그인이 사용할 쿠버설정 파일을 등록하기 위해 Kubernetes configuration (kubeconfing)
    • kubeconfig
      • 쿠버설정 파일을 가져오는 방법을 설정 가능
  • Pipeline으로 Item 새로 생성
    • Build Triggers 에서 Poll SCM 서렂ㅇ
      • /10 * * * 크론 표현식으로 10분마다 변화가 있는 지 체크

슬랙을 통해 변경사항 알리기

  • 젠킨스와 슬랙을 연동하는 단계
    • 젠킨스가 슬래긍로 메시지를 보낼 수 있는 대상인 슬랙 채널을 생성한다.
    • 슬랙채널에 젠킨스가 보내는 메시지를 전달할 수 잇는 Jenkins CI 앱을 추가해 젠킨스에서 슬래 채널 연동을 위한 토큰과 워크스페이스 도메인 주소 값을 확인한다.
    • 슬랙에서 발급한 토큰은 젠킨스 자격증명에 토큰을 등록한다.
    • 젠킨스에서 슬랙으로 메시지를 보내기 위해서 슬랙 알림 플러그인을 설치하고 시스템 설정 메뉴에 토큰과 워크스페이스 도메인 주소를 입력해 연동 작업을 마친다.
  • 슬랙의 워크스페이스에서 알림을 수신 바는 채널을 구성한다.
  • 슬랙에서 설정관리> 앱 관리 화면으로 이동 > Jenkins CI 검색 해서 Slack에 추가 > 채널 선택

Jenkins CI 통합 앱 추가

  • 연동 설정 지침 중 3단계 내용에서 자격증명 정보를 확인한다.
  • 통합 토큰 자격 증명 ID를 젠킨스 자격 증명 관리를 통해 이용하자.
  • 젠킨스 관리 > Managed Credentials > global 에 슬랙 자격 증명 키를 등록
    • kind: Secret text
    • Scope : global
    • Secret: 슬랙의 통합 토큰 자격 증명 ID 입력
  • 플러그인 관리 에서 Slack Notification을 검색해 설치하자
  • 젠킨스와 슬랙 연동 정보를 입력 하기위해 젠킨스관리 > 시스템설정으로 이동
    • Workspace: 슬랙의 팀 하위 도메인 입력
    • Credential : 앞서 설정한 slack-channel validation key 선택
    • Defualt channel/member id: 젠킨스로 부터 온 메시지를 받을 슬랙 채널
  • Jenkins file tnwjd
stages {
	stage('deploy start') {
		steps { #배포 작업 이전에 배포시작 알림 메시지를 슬랙 채널로 보냄
			slackSend(message: "Deploy ${env.BUILD_NUMBER} Started"
			, color: 'good', tokenCredentialId: 'slack-key')
		}
	}
stage('deploy end') {
	steps { #배포 작업 이후에 배포 완료 알림 메시지를 슬랙 채널로 보냄
		slakSend(message: """${env.JOB_NAME} #${env.BUILD_NUMBER} End
		""", color: 'good', tokenCredentialId: 'slack-key')
		}

Last Chages 플러그인

  • 배포 변경 사항을 자동 비교할 수있다.
  • 플러그인 관리탭에서 last changes 설치
  • Jenkinsfile 파일 수정
    stage('send diff') {
    	steps {
    		script { #이전 배포와 현재 배포의 코드 변동사항을 html로 만듬
    			def publisher = LastChanges.getLastChangesPublisher "PREVIOUS_REVISION",
    "SIDE", "LINE", true, true, "", "", "", "", ""
    			publisher.publishLastChanges()
    			def htmlDiff = publisher.getHtmlDiff()
    			writeFile file: "deploy-diff-${env.BUILD_NUMBER}.html", text: htmlDiff
    	} # 변경사항을 한누에 확인할 수 있는 주소를 메시지로 전달
    	slackSend(message: """${env.JOB_NAME} ${env.BUILD_NUMBER} End
    (<${env.BUILD_URL}/last-changes|Check Last change>)"""
    , color: 'good', tokenCredentialId: 'slack-key')
    }
  • Last Changes 플러그인에서는 Pipeline 프로젝트에서 사용하는 선언적인 문법이 적요되지 않기 때문에 그루비 스크립트를 사용해 이전 배포와 현재 배포의 차이를 찾아서 html파일로 작성하도록 구성한다.
  • 작성된 html은 슬랙 메시지로 전달되는 링크를 통해서 확인하거나 프로젝트 상세화면의 좌측메뉴를 통해 확인가능
profile
백엔드 개발자

0개의 댓글