Jenkins and CI/CD
젠킨스란?
- 자바로 작성된 오픈 소스 지속적 통합 및 지속적 제공 도구
- 소프트웨어 프로젝트를 구축하고, 제공하는 데 사용되는 자동화 서버
CI/CD 란?
- 지속적 통합, 즉 CI는 모든 개발자의 작업 복사본을 공유된 메인라인으로 하루에 몇 번식 병합하는 소프트웨어 엔지니어링 작업 방식이다.
- 지속적 제공, CD는 팀이 소프트웨어를 짧은 주기로 만들어 소프트웨어가 언제든지 안정적으로 출시할 수 있는 소프트웨어 엔지니어링 접근법입니다.
- 젠킨스는 소프트웨어를 짧은 주기로 출시하는 데 큰 도움을 줄 수 있습니다.
- 실제로 CI/CD는 자동화된 빌드와 테스트를 진행하여 작업을 검증하고 게시하는 것을 의미한다.
docker 란?
- 가장 보편적인 컨테이너 소프트웨어
- docker engine : 도커 이미지를 실행하는 소프트웨어
- docker hub : 도커 이미지를 저장하고 가져오는 온라인 서비스
Jenkins Job DSL
- 젠킨스 잡 DSL은 최소한의 작업만으로 프로그래밍 방식으로 작업을 정의할 수 있게 해주는 젠킨스의 플러그인
- example (npm install)
job('NodeJS example') {
scm {
git('git://github.com/...') { node ->
node / gitConfigName('DSL User')
node / gitConfigEmail('jenkins-dsl@newtech.academy')
}
}
trigger {
scm('H/5 * * * *')
}
wrapper {
nodejs('nodejs') // this is the name of the NodeJS installation in
// Manage Jenkins -> Configure Tools -> NodeJS Installations -> Name
}
steps {
shell("npm install")
}
}
ㆍscm에서 깃 저장소부터 찾아야 한다. + 깃클라이언트 설정
ㆍtrigger : 5분마다 확인, 변경사항이 있으면 NodeJS 다시 구축
ㆍwrapper을 정의하지 않으면 npm 사용 불가
ㆍsteps 명령어 수행
Jenkins Pipeline
- 젠킨스 파이프라인을 사용하면 젠킨스 구축 단계를 코드로 작성할 수 있다.
- 젠킨스 잡 DLS 는 사용자가 작성한 코드를 기반으로 새 작업을 생성
- 젠킨스 파이프라인은 작업 유형이다.
ㆍ한 프로젝트의 구축/테스트/배포를 처리하는 작업을 생성
- example
node {
def mvnHome
stage('Preparation') {
...
}
stage('Build') {
...
}
stage('Results') {
...
}
}
젠킨스 통합
- 이메일 통합
- 슬랙통합
- 깃헙 및 빗버킷 통합
- JFrog 아티팩토리 통합
ㆍ빌드의 결과 바이너리
ㆍ빌드의 결과인 이 아티팩트를 어딘가 저장하려면 JFrog 아티팩토리는 빌드에서 생성된 아티팩트를 저장할 수 있는 제품
ㆍ배포되는 빌드의 모든 아티팩트를 저장하는 것이 제일 좋다 - 개발서버에서 테스트 후 원래대로 되돌릴때!
ㆍJFrog & Artifactory Plugin
- 맞춤형 API 통합
- 소나큐브 통합
고급 젠킨스 사용
- 젠킨스 슬레이브
- 블루오션
- ssh-agent
- 보안 사용 수칙
젠킨스 시작하기
- 도커에 젠킨스 설치
$docker run -d --name jenkins --restart=on-failure \
-p 8080:8080 \
-v /var/jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-e TZ=Asia/Seoul \
-u root \
jenkins/jenkins
ㆍ--restart : on-failure 옵션은 비정상 종료시 컨테이너를 재실행합니다.
ㆍ-p : 외부 접속을 위해 호스트의 9999포트를 바인딩
ㆍ-v : 호스트의 var/jenkins 디렉토리를 호스트 볼륨으로 설정하여 jenkins 컨테이너의 home 디렉토리에 마운트
docker.sock 파일은 토커 데몬과 통신할 수 있는 소켓파일이다.
docker.sock 파일을 컨테이너에 마운트 시켜서 도커 명령을 실행할 수 있게 해준다.
이러한 방식을 dood(docker out of docker)라고한다.
ㆍ-e : 젠킨스의 timezone을 KST 기준으로 설정
ㆍ-u : 추후 권한 문제가 발생할 수 있기 때문에 user 옵션을 root 사용자
- 초기 비밀번호
$ docker exec -it cfb /bin/bash
$ cat /var/jenkins_home/secrets/initialAdminPassword
- plugin 정리
ㆍDocker Build and Publish plugin
ㆍjob dsl
ㆍEmail Extension Plugin
ㆍSlack Notification Plugin
ㆍGitHub Branch Source Plugin
ㆍArtifactory Plugin
ㆍHTTP request plugin