Introduction

Jenkins를 통해 GitOps 기반으로 Docker image가 빌드되고 Docker Hub에 push 되게 하려면 아래와 같은 여러 방식이 존재한다.

Docker-in-Docker (DinD) Docker Outside of Docker (DooD) Kaniko
Definition Container 내부에 별도의 Docker daemon 실행 Host의 Docker daemon을 사용 Docker daemon 없이 container image 빌드
Security 더 높은 격리 제공, 하지만 보안상의 우려도 존재 Host Docker와 직접적인 상호작용으로 보안상 취약할 수 있음 Docker daemon 없이 작동하여 보안 강화
Performance 성능 overhead 가능성 일반적으로 더 나은 성능 Docker daemon을 사용하지 않기 때문에 성능이 최적화될 수 있음
Complexity 설정과 관리가 더 복잡 상대적으로 간단한 설정 환경 설정에 따라 다르나, 일반적으로 설정이 간단함
Used Tools Jib, Buildah Docker CLI, Docker Compose Kaniko CLI, Kubernetes와의 통합
Suitable Use Cases 격리된 환경에서의 독립적인 container 관리 간단한 CI/CD pipeline 구성 Cloud 환경 및 Kubernetes에서의 image build
Read more »

Introduction

자주 사용하는 Python 함수들을 package로 생성하고 CI/CD pipeline을 Jenkins로 구축하여 자동으로 배포될 수 있게 해보자!
배포는 package 내부의 함수 및 객체를 sphinx로 문서화하고 PyPI (Python Package Index)에 업로드하여 pip로 설치할 수 있게 해볼 것이다.
CI/CD 계획은 아래와 같다.

  • Dev Branch Push
    1. Lint
    2. Build
    3. Test
  • Master Branch PR
    1. Lint
    2. Build
    3. Test
    4. Docs
  • Master Branch Puah
    1. Build
    2. Deploy
      1. PyPI
      2. GitHub

이 사항들을 Jenkins로 개발하고 blue ocean으로 확인해보면 아래와 같이 구성된다.

jenkinsfile

Read more »

Installation (Helm)

Argo CD로 Jenkins를 배포하기 위해 Helm으로 아래와 같이 helm chart를 받는다.

1
2
3
4
$ helm repo add jenkins https://charts.jenkins.io
$ helm repo update
$ helm pull jenkins/jenkins
$ tar -xvf jenkins-4.8.2.tgz

Traefik을 통해 ingress 설정을 https://jenkins.zerohertz.xyz로 정의했다.
따라서 values.yaml 파일을 아래와 같이 수정하고 배포했다.

values.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
...
controller:
...
jenkinsUrlProtocol: "https"
jenkinsUrl: "jenkins.zerohertz.xyz"
...
JCasC:
...
securityRealm: |-
local:
allowsSignup: false
enableCaptcha: false
users:
- id: "${chart-admin-username}"
name: "Jenkins Admin"
password: "${chart-admin-password}"
...

tada

Read more »

Installation

Install.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.6 LTS
Release: 20.04
Codename: focal
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install openjdk-17-jdk
$ java -version
openjdk version "17.0.8.1" 2023-08-24
OpenJDK Runtime Environment (build 17.0.8.1+1-Ubuntu-0ubuntu120.04)
OpenJDK 64-Bit Server VM (build 17.0.8.1+1-Ubuntu-0ubuntu120.04, mixed mode, sharing)
$ javac -version
javac 17.0.8.1
$ sudo update-alternatives --config java
There is only one alternative in link group java (providing /usr/bin/java): /usr/lib/jvm/java-17-openjdk-amd64/bin/java
Nothing to configure.
$ vi ~/.zshrc
...

OS 버전 확인 및 업데이트 후 sudo apt-get install openjdk-${VERSION}-jdk로 JDK를 설치한다.
여기서 JDK는 Java Development Kit의 약자로 Java application을 개발하기 위한 software package다.
JDK는 개발, compile, debug 및 실행하는 데 필요한 모든 도구와 library를 포함한다.

Read more »