DevOps 학습 파이프라인 및 Docker를 이용한 Jenkins와의 CI/CD - 2주차
젠킨스 통합
24. Email integration
개발자에게 build 나 ~ 가 잘 못 됐다는 것을 메일로 알려줌
빨리 알려주면 빨리 대처 가능해 생산성이 높아진다.
개발자가 commit 할 때마다 버전 관리에서 코드를 확인해 변경 사항에 대해 Jenkins 에서 Build
+ 테스트도 함께
그럼 변경 사항이 발생한지 어떻게 알어?
- pull : jenkins 가 일정 시간마다 버전 관리 시스템에서 pull
- push : 버전 관리 시스템에는 http 요청을 사용해 push 알림을 보낼 수 있음
Github, bitbucket 이용해서 실습 해 볼 예정
2 번 낫고 지원 안 하면 1 번 써...
25. 시연 : 젠킨스 파이프라인을 이용한 이메일 통합
Email Extension Plugin 설치 ( 처음에 권장 설치 했으면 이미 있음 )
jenkins → configure → Extended E-mail Notification 에서 설정 가능
node {
// config
def to = emailextrecipients([
[$class: 'CulpritsRecipientProvider'],
[$class: 'DevelopersRecipientProvider'],
[$class: 'RequesterRecipientProvider']
])
// job
try {
stage('build') {
println('so far so good...')
}
stage('test') {
println('A test has failed!')
sh 'exit 1'
}
} catch(e) {
// mark build as failed
currentBuild.result = "FAILURE";
// set variables
def subject = "${env.JOB_NAME} - Build #${env.BUILD_NUMBER} ${currentBuild.result}"
def content = '${JELLY_SCRIPT,template="html"}'
// send email
if(to != null && !to.isEmpty()) {
emailext(body: content, mimeType: 'text/html',
replyTo: '$DEFAULT_REPLYTO', subject: subject,
to: to, attachLog: true )
}
// mark current build as a failure and throw the error
throw e;
}
}
new jobs → email test → pipeline
Build Triggers : poll scm H/5 * * * *
https://github.com/phj1120/jenkins-course.git
email-notifications/Jenkinsfile
메일 설정 다 하고 build 하면 실패하고 메일로 전송 됨
근데 안 해봄.
slack 해봐야지
26. 슬랙 통합
ChatOps
사용자, 도구, 프로세스, 자동화를 투명한 워크플로우로 연결하는 협업 모드
문제에 대해 대화 중심의 협업
서버 버그 발생 → 관련된 사람들 있는 방에 버그 발생 알림 → 어제 내가 이거 수정했는데 이래서 그런가?(대화를 통해 배경 정보를 얻을 수 있음) → 참고해서 고쳐볼게 → 고침 → commit → jenkins 가 서버 build 후 성공 여부 전송 → 다른 엔지니어도 이를 확인 → 모두 최신의 정보를 알 수 있다.
어떤 상황에서 어떤 메시지를 보낼지도 다 마음대로 정할 수 있음
27.시연: 슬랙 통합
jenkins : Slack Notification Plugin 플러그인 설치
slack : jenkins CI 앱 설치
자격증명

새 pipeline 작업 추가
https://github.com/phj1120/jenkins-course
slack-notifications/Jenkinsfile
Build 하면 실패하고 슬랙에 메시지 전송 됨
28. Github /Bitbucket 통합
새 저장소를 자동으로 탐지 해 프로젝트를 자동으로 젠킨스에 구축
28. 시연: 그래들 + 자바 프로젝트를 이용한 깃헙 통합
GitHub Branch Source 플러그인 설치 - 되어 있음
Organization Folder
깃헙에서 repo 권한만 있는 토큰 발행
설정


이제 노드 말고 자바로
Jenkinsfile
node {
def myGradleContainer = docker.image('gradle:jdk8-alpine')
myGradleContainer.pull()
stage('prep') {
checkout scm
}
stage('test') {
myGradleContainer.inside("-v ${env.HOME}/.gradle:/home/gradle/.gradle") {
sh 'cd complete && gradle test'
}
}
stage('run') {
myGradleContainer.inside("-v ${env.HOME}/.gradle:/home/gradle/.gradle") {
sh 'cd complete && gradle run'
}
}
}
gradle 과 jdk 필요 → docker 로 구축
일단 gradle 종속성 받을 폴더 생성 & 권한 부여
mkdir -p /var/jenkins_home/.gradle
chown 1000:1000 /var/jenkins_home/.gradle
종속성이 여기 다운 될 거임(jenkins에서 설정/"-v ${env.HOME}/.gradle)
모든 build 에서 공유하므로 캐시 되는 효과

github 통합 이용해 젠킨스파일로 gradle 프로젝트 build 하는 법
강의 중
한 프로젝트에 다양한 언어가 포함 될 수 있다
마이크로 서비스로
한 팀은 노드 한 팀은 자바 애플리케이션을 실행 할 때 node 부분, gradle 부분 나눠져 있을 수도 있음
30. 빗버킷 통합
31. JFrog 아티팩토리 통합
지금까지 docker hub 로 docker image 제출
jenkins 에서는 이를 artifact 라 함
build 의 결과 바이너리 : .jar .tgz .zip ....
이 아티팩트를 저장할 수 있는 곳 JFrog
이미 구축한 버전을 재 빌드 할 필요 없게 저장 하는 곳
개발 및 스테이징에서 즉시 출시 프로세스를 시작할 수 있음
global tool configuration 에 grale 추가
grale 이용 : Jenkinsfile
grale 없이 : Jenkinsfile.withjfrog
33. 맞춤형 API 통합
jenkins 에서 플러그인을 지원 안 할 경우
HTTP 요청 플러그인만 있으면 다 연동 가능함
HTTP Request Plugin 설치
bitbucket 플러그인 안 쓰고 API 로 하는 거 예제
소나큐브
코드 품질에 대해 지속적으로 점검하는 소프트웨어
버그, 보안, 기술 부채, 코드 범위 등등
젠킨스와 자주 통합되어 사용
sonascanner 가 읽어서 sonar 서버에 보내서 코드 품질 검사
컨테이너 추가.. DB, sonarcube
docker-compose
yaml 형식의 컨테이너 정의를 기반으로 컨테이너를 가동
시스템을 재부팅하거나 컨테이너를 중지하고 다시 시작 하고 싶을 경우 사용
본 스터디는 Udemy의 <【한글자막】 Docker & Kubernetes: 실전 가이드 -2022년판> 강의를 활용해 진행됐습니다. 강의에 대한 자세한 정보는 아래에서 확인하실 수 있습니다.
프밍 스터디는 Udemy Korea와 함께 합니다.