젠킨스 기본 사용법
1. Jenkins는 'item'단위로 프로젝트를 관리
- 웹 사용자 인터페이스를 이용해서 설정할 수 있고 상태를 열람할 수 있도록 되어 있음
2. 파이프라인에 빌드 절차를 기술할 수 있음
- 앞에서는 매우 간단한 (echo 'Hello world') 동작을 시험 삼아 기술해 보았음
3. 빌드는 어떤 이벤트에 의하여 시작
- 앞에서는 Build Now를 클릭함으로써 수동으로 빌드 개시했음
- 보통은 SCM(EX. git) 레포지토리에 발생하는 이벤트 (ex. push)에 의하여 트리거 됨
4. k8s 클러스터에서 운용되는 Jenkins는 동적으로 에이전트 프로비저닝
- 이와 관련한 설정을 이미 helm을 이용해 Jenkins를 설치할 때 이루어져 있었음.
컨테이너 스펙을 작성해서 포드 템플릿의 설정을 완성
1. 신규 추가하는 포드 템플릿에는 두 개의 컨테이너 스펙이 포함되도록 할 예정
- 따라서 이것에 의해서 생성되는 포드에서는 두 개의 컨테이너가 실행될 것
2. 빌드 작업을 실행할 컨테이너 (이름 : jnlp)
- JNLP(java network launch protocol)을 따라 jenkins 마스터와 작업 조율하면서 빌드 작업 실행
- docker CLI와 kubectl CLI를 갖추고 있음
- 미리 만들어진 (이후에는 이런 것들을 직접 만들어 빌드 환경을 구성하게 됩니다만) 이미지 이용
3. 도커 데본 (daemon)을 실행하는 컨테이너 (이름 : dind)
- 어느 클러스터에 있더라도 통일된 docker build 환경을 제공하기 위해 독립된 컨테이너로 제공 (예를 들어 현재 docker desktop으로 클러스터 제공하고 있는 호스트의 daemon 이용하지 않음)
- 이미지는 docker:latest를 이용하기로 함.
Jenkins 파이프라인의 구성
1. Jenkins 파이프라인 정의에는 두 가지 방식이 있음
- 선언적인 (declarative) 방식 : 우리가 지금까지 실습한 방법
- 빌드 단계(stage)를 선언적으로 정의하는 방식
- 스크립트 방식 : 아직까지는 마주친 적 없지만 앞으로 만나보게 될 것
- 빌드 단계를 절차적으로 기술하는 (스크립트를 실행하는) 방식
2. 두 가지 방식으로 파이프라인 실습을 해 보았음
- Jenkins UI에서 선언적 스크립트를 입력하는 방식
- github repo에 Jenkinsfile로 파이프라인 스크립트를 저장하는 방식
과제
- 이것이 CI/CD파이프라인을 구축하는 데 어떤 방식으로 적용될지를 생각해 보기(모든 것은 자동화해야 한다는 관점에서 바라볼 필요가 있음)