DevOps/Window

window에 Jenkins CI 구축해보기

kimc 2025. 7. 15. 01:48

윈도우에 Jenkins CI 구축해 보기


```

윈도우에 젠킨스 CI 구축해 보기

```

 

이번 글을 통해 배워갈 내용

  1. 소개
  2. 설치
  3. 도커파일 세팅
  4. 파이프라인 세팅
  5. 실행 및 확인
  6. 마무리

 

1. 소개

Jenkins를 Windows 환경에 설치해 간단한 CI 파이프라인을 구성하고, 빌드한 Docker 이미지는 사설 레지스트리에 푸시하는 방식으로 운영하고 있습니다. 아직 초기 단계지만, 앞으로는 GitOps 기반으로 확장하고 ArgoCD와 연동하는 것도 고려 중입니다. 

 

Rust는 아무래도 빌드가 무거운 편이라, 클라우드에서 직접 이미지 빌드와 푸시 작업을 돌리면 시간도 오래 걸리고 비용도 꽤 발생하더라고요. 그래서 현재는 로컬에서 빌드를 처리하고, 결과물만 레지스트리에 업로드하는 방식으로 작업 흐름을 최적화하고 있습니다.


2. 설치

먼저 젠킨스 설치를 합니다.

https://www.jenkins.io/download/#downloading-jenkins

 

Download and deploy

Jenkins – an open source automation server which enables developers around the world to reliably build, test, and deploy their software

www.jenkins.io

 

기본 세팅 외에는 docker pipleline만 설치했습니다.

윈도우에 설치기 때문에 WSL2 하고 docker desktop 도 설치했습니다.

 

3. 도커파일 세팅 

Rust 빌드는 nightly 채널이 필요한 일부 실험적 기능을 사용하고 있어 rust:nightly-slim 이미지를 기반으로 작성했습니다. 빌드 캐시 최적화를 위해 Cargo 파일을 먼저 복사한 후, 의존성만 미리 받아 빌드 시간을 줄였고, 완성된 바이너리는 슬림한 Debian 베이스 이미지에서 실행되도록 구성했습니다.

# === 빌드 단계 ===
FROM rustlang/rust:nightly-slim as builder

# 빌드에 필요한 의존성 설치
RUN apt-get update && apt-get install -y \
    pkg-config \
    libssl-dev \
    libpq-dev \
    build-essential \
    ca-certificates \
    && rm -rf /var/lib/apt/lists/*

# 작업 디렉토리 설정
WORKDIR /app

# 캐시 최적화를 위해 Cargo 설정 파일 먼저 복사
COPY Cargo.toml Cargo.lock ./

# 의존성 미리 받아오기
RUN mkdir src && echo 'fn main() {}' > src/main.rs
RUN cargo +nightly fetch
RUN cargo +nightly build --release || true

# 전체 소스 코드 복사
COPY . .

# 실제 바이너리 빌드
RUN cargo +nightly build --release

# === 런타임 단계 ===
FROM debian:bookworm-slim

# 런타임에 필요한 패키지 설치
RUN apt-get update && apt-get install -y \
    ca-certificates \
    libpq5 \
    libgcc1 \
    libc6 \
    && rm -rf /var/lib/apt/lists/*

# 작업 디렉토리 설정
WORKDIR /app

# 빌드 단계에서 생성된 릴리스 바이너리 복사
COPY --from=builder /app/target/release/my_app /app/my_app

# 포트 노출
EXPOSE 5000

# 애플리케이션 실행
CMD ["./my_app"]

 

 

4. 파이프라인 세팅

Jenkins를 사용해 Docker 이미지를 빌드하고 사설 레지스트리에 푸시하는 파이프라인을 구성했습니다. 프로젝트 디렉토리에서 이미지를 생성한 뒤, 인증 정보를 통해 latest 태그로 레지스트리에 업로드하도록 설정했습니다.

pipeline {
  agent any

  stages {
    stage('Build and Push Docker Image') {
      steps {
        dir('/path/to/project') {
          withDockerRegistry(credentialsId: 'your-docker-credentials', url: 'https://your-registry-url.com') {
            script {
              def image = docker.build('your-registry-url.com/your-image-name:latest', '.')
              image.push('latest')
            }
          }
        }
      }
    }
  }
}

 

 

5. 실행 및 확인

Kubernetes에서는 간단하게 rollout restart deployment 명령으로 배포를 진행했습니다.

Spring이라면 개인플젝도 부트 타임 문제로 블루그린 배포를 고민했겠지만,

Rust는 부팅 속도가 워낙 빨라서 그냥 rollout만으로도 충분했습니다.

생각보다 훨씬 빠르고 가볍게 올라가네요.

 

 


6. 마무리

사실 예산만 충분하다면, 많은 기업들이 Jenkins를 비롯한 CI/CD 환경을 클라우드에서 운영하는 편을 선호할 겁니다. 

유지 관리나 확장성 측면에서 확실한 이점이 있으니까요. 

 

이번에는 간단히 rollout restart로 배포를 처리했지만, 

다음에는 ArgoCD를 붙여서 GitOps 방식으로도 한번 구성해 볼 생각입니다. 


 

 

읽어주셔서 감사합니다

 

무엇인가 얻어가셨기를 바라며

 

오늘도 즐거운 코딩 하시길 바랍니다 ~ :)

 

참조 및 인용

https://www.jenkins.io/doc/book/installing/windows/

 

Windows

Jenkins – an open source automation server which enables developers around the world to reliably build, test, and deploy their software

www.jenkins.io

 

728x90