jenkins 5

Jenkins - Approval Stage 구현

빌드 및 테스트 완료 후, Production 환경에 업데이트 된 버전을 배포하기 전에 사용자의 별도의 승인을 요청하는 케이스를 생각할 수 있다. 우선 승인 요청이 발생했다는 사실을 Email, Slack, Jira 등으로 사용자에게 전달한 뒤, 파이프라인을 일시중지한 상태에서 진행/중단 입력을 기다리는게 이 동작의 핵심이다. 이번 시간엔 이메일을 보내고 사용자의 승인을 기다리는 시나리오로 진행해보자. Email Extension 우선 이메일을 보내기 위해 Email Extension 플러그인이 필요하다. 아직 설치하지 않은 경우, Jenkins Plugin Manager를 통해 쉽게 추가할 수 있다. 설치가 완료됐다면, 해당 플러그인의 SMTP 서버를 세팅해야 한다. 'Jenkins 관리' > '시스템..

CI-CD 2021.03.05

Jenkins Pipeline

What is Jenkins Pipeline Jenkins에서 새로운 Job을 생성하거나 기존 설정을 변경하기 위해서, 대부분은 Web UI에서 매뉴얼 방식으로 작업한 경험이 있을 것이다. Job이 몇개 없고 설정도 단순하다면 큰 문제가 되지 않지만, 점차 구성이 복잡해지고 관리해야 할 Job이 늘어날 수록 이 방식은 적합하지 않다.. 예를 들어, 진행중인 프로젝트에 CI/CD 파이프라인을 적용한다고 하자. 동일한 소스 코드에 대해 빌드/테스트/배포 Job이 서로 분리되어 있으므로 설정도 따로 해야하고, 각 단계가 어떻게 진행되었는지 직관적인 파악이 어려운 경우가 있다. Jenkins Pipeline은 프로젝트의 전체 파이프라인을 개발자가 직접 정의한 코드 형태(Pipeline as Code)로 받아 하..

CI-CD 2021.03.01

CD를 위한 Jenkins, Argo CD 연계

이전 포스트에서 Jenkins, GitHub, Docker Hub를 파이프라인으로 구성하여, 컨테이너 이미지 빌드를 자동화하였다. 이번 시간엔 Argo CD를 연계하여 배포까지 자동화된 CI/CD Pipeline을 만들어 볼 차례다. 우선 기존 구성에서 추가되는 내용은 다음과 같다. 1. Jenkins에서 Image 빌드 및 Push 후, 배포 전용 Repository에 새로운 이미지 태그 반영 2. Argo CD는 해당 Repository로부터 Auto Sync 수행 3. AutoSync를 통해 업데이트된 Manifest를 사용하여 리소스 재생성 참고로 GitHub와 Argo CD의 연결은 일반적으로 GitHub Webhook 방식을 사용하나, 현재 테스트 환경은 외부에서 Argo CD에 접근할 수 없..

CI-CD 2021.02.21

CI를 위한 Jenkins, GitHub, Docker Hub 연계

본격적인 CI 구성을 위해 Jenkins와 GitHub 그리고 Docker Hub를 연계하는 방법에 대해 설명한다. k8s 위에 Jenkins를 배포하는 방법에 대해선 이전 포스트를 참고한다. 실습 환경에서 CI는 다음과 같은 일련의 순서로 이루어진다고 가정하자. 1. 개발자가 자신이 작업한 코드를 GitHub Repository에 반영 2. Jenkins는 해당 Repository를 Checkout하여 Docker Image로 빌드 3. 빌드 완료 후 Docker Hub로 Image를 Push 실제 CI 과정에선 코드 리뷰나 테스트 등의 과정이 포함되어야 하나 이번 실습에선 생략하도록 한다. 우선은 Jenkihns가 GitHub에서 Code를 가져올 수 있도록 Credential을 추가하자. GitHu..

CI-CD 2021.02.20

Kubernetes 위에 Jenkins 설치하기

이번엔 Kubernetes 위에 Jenkins를 설치해보자. 가장 먼저 아래와 같이 Manifest 파일을 작성한다. [jenkins-master.yaml] apiVersion: apps/v1 kind: StatefulSet metadata: name: jenkins spec: serviceName: jenkins replicas: 1 selector: matchLabels: app: jenkins template: metadata: labels: app: jenkins spec: serviceAccountName: jenkins containers: - name: jenkins image: jenkins/jenkins:lts ports: - name: http-port containerPort: 808..

CI-CD 2021.02.19