서버 운영 환경에서는 CI/CD 자동화를 통해 코드 변경부터 Docker Image 생성, 배포까지 자동으로 처리하는 구조가 중요합니다.
GitHub Actions와 GitLab CI 외에도 기업 서버 환경에서는 여전히 Jenkins를 많이 사용합니다.
기본 수동 배포:
개발자 코드 수정
↓
서버 접속
↓
Docker Build 실행
↓
Image Push
↓
배포
문제:
- 반복 작업 증가
- 사람 실수 발생
- 배포 시간 증가
- 운영 관리 어려움
Jenkins Pipeline 사용:
Git Push
↓
Jenkins Trigger
↓
Buildx Bake 실행
↓
Docker Image 생성
↓
Registry Push
↓
자동 배포
Docker Buildx Bake와 Jenkins를 연결하면 다음 작업을 자동화할 수 있습니다.
- Docker Image Build
- Multi-platform Build
- Cache 적용
- Registry Push
- Secret 관리
- Production 배포
예:
Jenkinsfile
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'docker buildx bake production --push'
}
}
}
}
결과:
Git 변경
↓
Jenkins 실행
↓
Docker Build
↓
Registry 저장
이번 글에서는 Docker Buildx Bake Jenkins Pipeline 구성부터 Docker Buildx 설정, Registry 연결, Cache 최적화, Multi-platform Build, Production CI/CD 운영 방법까지 알아보겠습니다.
Docker Buildx Bake Jenkins Pipeline이란 무엇인가?
Docker Buildx Bake Jenkins Pipeline은 Jenkins 자동화 환경에서 Docker Buildx Bake를 실행하는 방법입니다.
구조:
Developer
↓
Git Repository
↓
Jenkins Server
↓
Docker Buildx Bake
↓
Container Registry
↓
Production Server
구성 요소:
- Jenkins
- Jenkins Pipeline
- Docker Buildx
- docker-bake.hcl
- Docker Registry
Docker Buildx Bake Jenkins Pipeline이 필요한 이유
대규모 서버 환경에서는 반복적인 Build 작업을 자동화해야 합니다.
수동 방식:
코드 변경
↓
관리자 확인
↓
Docker Build
↓
배포
문제:
- 시간 소요
- 배포 오류 가능
- 일관성 부족
자동화 방식:
Code Push
↓
Jenkins 실행
↓
자동 Build
↓
자동 Push
장점:
- 안정적인 배포
- 반복 작업 제거
- 운영 표준화
- 빠른 Release
Docker Buildx Bake Jenkins 기본 구성
프로젝트 구조:
project/
├── Dockerfile
├── docker-bake.hcl
└── Jenkinsfile
docker-bake.hcl:
target "production" {
tags = [
"registry.company.com/app:v1"
]
}
Jenkinsfile:
pipeline {
agent any
stages {
stage('Checkout') {
steps {
checkout scm
}
}
stage('Build Image') {
steps {
sh 'docker buildx bake production'
}
}
}
}
실행 흐름:
Jenkins 실행
↓
Source Checkout
↓
Docker Build
↓
Image 생성
Jenkins에서 Docker Buildx 설정하기
Jenkins Server에는 Docker와 Buildx가 필요합니다.
확인:
docker buildx version
Builder 생성:
docker buildx create --use
확인:
docker buildx inspect
결과:
Builder 활성화
↓
Bake 실행 가능
Docker Buildx Bake Jenkins Registry Push
Production 환경에서는 Build 후 Registry Push가 필요합니다.
Jenkins Credential 사용:
stage('Login Registry') {
steps {
withCredentials([
usernamePassword(
credentialsId: 'docker-login',
usernameVariable: 'USER',
passwordVariable: 'PASS'
)
]) {
sh 'docker login -u $USER -p $PASS registry.company.com'
}
}
}
Build:
stage('Build Push') {
steps {
sh 'docker buildx bake production --push'
}
}
흐름:
Jenkins
↓
Registry 인증
↓
Bake Build
↓
Image Push
Docker Buildx Bake Jenkins Cache 설정
Jenkins Build 속도를 높이기 위해 Cache를 사용할 수 있습니다.
docker-bake.hcl:
target "production" {
cache-from = [
"type=registry,ref=image:cache"
]
cache-to = [
"type=registry,ref=image:cache"
]
}
효과:
기존 Layer 확인
↓
변경 부분만 Build
↓
Build 시간 감소
Docker Buildx Bake Jenkins Multi-platform Build
Jenkins에서도 여러 Architecture Image를 생성할 수 있습니다.
설정:
target "production" {
platforms = [
"linux/amd64",
"linux/arm64"
]
}
Jenkins 실행:
sh 'docker buildx bake production --push'
결과:
Registry
app:v1
├── AMD64
└── ARM64
Docker Buildx Bake Jenkins Secret 관리
민감한 정보는 Jenkins Credentials를 활용합니다.
관리 대상:
- Docker Password
- API Key
- SSH Key
- Token
예:
withCredentials([string(
credentialsId: 'api-token',
variable: 'TOKEN'
)]) {
sh 'docker buildx bake production'
}
장점:
- Secret 보호
- 코드 노출 방지
- 안전한 Build
Docker Buildx Bake Jenkins Attestation 적용
보안 중심 운영에서는 Image 검증 정보를 생성할 수 있습니다.
예:
sh '''
docker buildx bake production \
--push \
--attest type=provenance \
--attest type=sbom
'''
결과:
Image
+
SBOM
+
Provenance
↓
Registry 저장
Docker Buildx Bake Jenkins 실무 Jenkinsfile 예제
pipeline {
agent any
stages {
stage('Checkout') {
steps {
checkout scm
}
}
stage('Setup Buildx') {
steps {
sh 'docker buildx create --use'
}
}
stage('Build Image') {
steps {
sh 'docker buildx bake production --push'
}
}
}
}
구조:
Git Commit
↓
Jenkins 실행
↓
Buildx 생성
↓
Bake 실행
↓
Registry Push
Docker Buildx Bake Jenkins 확인 방법
Jenkins:
Dashboard
↓
Build History
↓
Console Output
확인:
docker buildx imagetools inspect image-name
확인:
- Image Tag
- Digest
- Platform
- Attestation
Docker Buildx Bake Jenkins 문제 해결
Buildx 명령어 오류
확인:
docker buildx version
Docker Buildx 설치 상태 확인
Jenkins Docker 권한 오류
확인:
docker ps
Jenkins User Docker 권한 확인
Registry Push 실패
확인:
- Credential 설정
- Registry 권한
- Login 정보
Docker Buildx Bake Jenkins 사용 시 주의사항
첫 번째는 Jenkins Server에 Docker 권한을 안전하게 설정해야 합니다.
두 번째는 Credential을 Jenkins 내부 Secret으로 관리해야 합니다.
세 번째는 Build Node 환경을 동일하게 유지하는 것이 좋습니다.
네 번째는 Production Pipeline과 테스트 Pipeline을 분리하는 것이 좋습니다.
Best Practice
Docker Buildx Bake Jenkins 활용 방법:
- Pipeline 자동화
- Registry Push 자동화
- Cache 적용
- Multi-platform Build
- Secret 관리
- SBOM/Provenance 적용
자주 묻는 질문
Jenkins에서도 Docker Buildx Bake를 사용할 수 있나요?
가능합니다.
Jenkins Pipeline에서 Docker Build 자동화를 구성할 수 있습니다.
Jenkins와 GitHub Actions 차이는 무엇인가요?
Jenkins는 자체 서버 기반 자동화 도구이며 기업 내부 환경에서 많이 사용됩니다.
Multi-platform Build가 가능한가요?
가능합니다.
Buildx와 QEMU 환경을 활용할 수 있습니다.
Production 배포에도 사용할 수 있나요?
가능합니다.
Build → Registry Push → Deploy 구조로 확장할 수 있습니다.
마무리
Docker Buildx Bake Jenkins Pipeline은 기업 서버 환경에서 안정적인 Docker Build 자동화를 구축하는 중요한 방법입니다.
Jenkins의 강력한 Pipeline 기능과 Docker Buildx Bake를 결합하면 Image 생성, 검증, 저장, 배포 과정을 자동화할 수 있습니다.
특히 자체 서버 운영, Private Cloud, Kubernetes 환경에서는 Jenkins 기반 CI/CD 구조가 많이 활용되며 Docker Buildx Bake와 함께 사용하면 더욱 효율적인 DevOps 환경을 만들 수 있습니다.