Docker Buildx Bake Jenkins 사용법 완벽 가이드! Jenkins CI/CD 자동 빌드 구성하기

Docker 이미지를 운영 환경에 배포할 때 자동화된 CI/CD Pipeline은 필수적인 요소입니다.

특히 대규모 프로젝트에서는 코드 변경마다 직접 Docker 이미지를 빌드하고 Registry에 업로드하는 방식은 비효율적입니다.

기존 방식:

docker buildx bake --push

직접 실행

이미지 생성

Registry 업로드

하지만 Jenkins와 Docker Buildx Bake를 연결하면 다음 과정을 자동화할 수 있습니다.

Git Push

↓

Jenkins Pipeline 실행

↓

Docker Buildx Bake 실행

↓

Docker Image 생성

↓

Registry Push

↓

배포

이번 글에서는 Docker Buildx Bake와 Jenkins 연동 방법, Jenkinsfile 작성, Docker Buildx 설정, Registry Push, Cache 적용, Multi-platform 빌드 자동화 방법까지 자세히 알아보겠습니다.

Docker Buildx Bake Jenkins란 무엇인가?

Docker Buildx Bake Jenkins는 Jenkins CI/CD 환경에서 Docker Buildx Bake를 자동 실행하는 구성 방법입니다.

기본 구조:

Source Code

↓

Jenkins Pipeline

↓

Docker Buildx Builder

↓

docker buildx bake

↓

Docker Image

Jenkins가 Docker 이미지 빌드 과정을 자동으로 관리합니다.

Docker Buildx Bake와 Jenkins를 사용하는 이유

수동 빌드:

docker buildx bake --push

문제:

  • 사람이 직접 실행해야 함
  • 빌드 환경 차이 발생
  • 반복 작업 증가
  • 배포 속도 저하

Jenkins 적용:

코드 변경

↓

자동 빌드

↓

자동 테스트

↓

자동 배포

장점:

  • Build 자동화
  • 배포 시간 단축
  • 동일한 환경 유지
  • 작업 오류 감소

Jenkins Pipeline 기본 Docker Buildx 설정

Jenkins Pipeline 파일:

Jenkinsfile

기본 구조:

pipeline {

    agent any

    stages {

        stage('Build') {

            steps {

                sh 'docker buildx bake'

            }

        }

    }

}

Jenkins가 Buildx Bake 명령을 실행합니다.

Jenkins에서 Docker Buildx Builder 생성하기

Pipeline 내부에서 Builder를 생성할 수 있습니다.

예:

pipeline {

    agent any

    stages {

        stage('Setup Buildx') {

            steps {

                sh '''
                docker buildx create \
                --use \
                --name jenkins-builder

                docker buildx inspect
                '''

            }

        }

    }

}

동작:

Jenkins 실행

↓

Buildx Builder 생성

↓

Docker Build 가능

Docker Buildx Bake Jenkins Registry Push 설정

운영 환경에서는 빌드한 이미지를 Registry에 저장해야 합니다.

예:

stage('Login Registry') {

    steps {

        sh '''
        docker login \
        -u $DOCKER_USER \
        -p $DOCKER_PASSWORD
        '''

    }

}

Build Push:

stage('Build Image') {

    steps {

        sh '''
        docker buildx bake --push
        '''

    }

}

결과:

Jenkins

↓

Docker Build

↓

Registry Push

Docker Buildx Bake Jenkins Cache 설정

Jenkins는 새로운 Build 환경에서 실행되는 경우가 많기 때문에 Cache 설정이 중요합니다.

docker-bake.hcl:

target "app" {

  cache-from = [

    "type=registry,ref=company/cache"

  ]


  cache-to = [

    "type=registry,ref=company/cache"

  ]

}

효과:

  • Docker Layer 재사용
  • 빌드 시간 감소
  • Jenkins 실행 속도 향상

Docker Buildx Bake Jenkins Multi-platform 빌드

여러 서버 환경을 지원하려면 Multi-platform 빌드가 필요합니다.

docker-bake.hcl:

target "app" {

    platforms = [

        "linux/amd64",

        "linux/arm64"

    ]

}

Jenkinsfile:

stage('Build') {

    steps {

        sh '''

        docker buildx bake --push

        '''

    }

}

결과:

AMD64 Image 생성

+

ARM64 Image 생성

Docker Buildx Bake Jenkins Secret 관리

민감한 정보는 Jenkins Credentials를 사용합니다.

관리 대상:

  • Docker Registry Password
  • API Token
  • SSH Key

Jenkinsfile:

withCredentials([

    usernamePassword(

        credentialsId: 'docker-login',

        usernameVariable: 'USER',

        passwordVariable: 'PASS'

    )

]) {

    sh '''

    docker login \
    -u $USER \
    -p $PASS

    '''

}

보안 정보를 안전하게 사용할 수 있습니다.

Docker Buildx Bake Jenkins 실무 예제

프로젝트 구조:

project/

├── Dockerfile

├── docker-bake.hcl

└── Jenkinsfile

Jenkinsfile:

pipeline {

    agent any


    stages {


        stage('Checkout') {

            steps {

                checkout scm

            }

        }


        stage('Buildx Setup') {

            steps {

                sh '''

                docker buildx create \
                --use

                '''

            }

        }


        stage('Build Image') {

            steps {

                sh '''

                docker buildx bake --push

                '''

            }

        }

    }

}

코드 변경 시:

자동 Build

자동 Push

Docker Buildx Bake Jenkins와 배포 자동화

전체 흐름:

Developer Push

↓

Jenkins Trigger

↓

Docker Buildx Bake

↓

Registry Push

↓

Server Deploy

활용:

  • Kubernetes 배포
  • Docker Compose 배포
  • Cloud 서버 운영

Jenkins Agent에서 Docker Buildx 사용하기

Jenkins Agent에는 다음 환경이 필요합니다.

필요 요소:

  • Docker 설치
  • Docker Buildx 지원
  • Registry 접근 권한
  • Docker Socket 권한

확인:

docker buildx version

정상 출력되면 Buildx 사용 가능합니다.

Linux 서버 문제 해결

기존에는 개발자가 직접 Docker 이미지를 빌드했습니다.

기존:

docker buildx bake --push

문제:

  • 빌드 과정 반복
  • 배포 지연
  • 환경 차이 발생

Jenkins 적용:

stage('Docker Build') {

    steps {

        sh 'docker buildx bake --push'

    }

}

결과:

  • 코드 변경 자동 감지
  • Docker Image 자동 생성
  • Registry 자동 Push

CI/CD 환경을 구축할 수 있었습니다.

Docker Buildx Bake Jenkins 사용 시 주의사항

첫 번째는 Jenkins Agent의 Docker 권한 설정이 필요합니다.

두 번째는 Registry 인증 정보를 Credentials로 관리해야 합니다.

세 번째는 Cache 설정을 적용하면 빌드 속도가 향상됩니다.

네 번째는 Production Pipeline은 별도로 관리하는 것이 좋습니다.

Best Practice

Docker Buildx Bake Jenkins 활용 방법:

  • Jenkinsfile 기반 Pipeline 관리
  • Credentials 보안 관리
  • Registry Push 자동화
  • Cache 적용
  • Multi-platform 빌드 구성
  • Production 배포 단계 분리

자주 묻는 질문

Docker Buildx Bake를 Jenkins에서 사용할 수 있나요?

가능합니다.

Jenkins Pipeline에서 Docker Buildx Bake 명령을 실행하면 됩니다.

Jenkins에서 자동 Docker Image Push가 가능한가요?

가능합니다.

Registry 인증 후 --push 옵션을 사용하면 됩니다.

Cache를 적용할 수 있나요?

가능합니다.

Registry Cache를 활용하면 반복 빌드 속도를 높일 수 있습니다.

Multi-platform 빌드도 가능한가요?

가능합니다.

linux/amd64와 linux/arm64 이미지를 동시에 생성할 수 있습니다.

마무리

Docker Buildx Bake와 Jenkins를 함께 사용하면 Docker 이미지 빌드부터 배포까지 자동화된 CI/CD 환경을 구축할 수 있습니다.

Jenkins Pipeline에서 Buildx Builder를 생성하고 Bake 설정 파일을 활용하면 여러 서비스, 여러 플랫폼, 다양한 배포 환경을 효율적으로 관리할 수 있습니다.

특히 기업 환경이나 대규모 Docker 운영 환경에서는 Docker Buildx Bake와 Jenkins 조합을 활용하면 안정적이고 반복 가능한 자동화 빌드 시스템을 만들 수 있습니다.

댓글 남기기