티스토리 뷰

JVM/Jenkins

Jenkins Pipeline Docker Usage

글을 쓰는 개발자 2023. 5. 3. 08:30
반응형

Plugin Install

  1. 좌측에 Jenkins 관리 클릭
  2. System Configuration > 플러그인 관리 클릭
  3. 좌측 Avaulable plugins 클릭 후 검색창에 Docker API Plugin 타이핑
  4. checkbox 클릭 후 설치 진행

Docker Pipeline CLI

Credentials

일반적으로 Docker Pipeline CLI 를 쓰는 이유는 사내 docker registry 혹은 docker hub 에 이미지를 푸시하기 위해 사용된다. 그렇기에 해당 registry에 접근하기 위한 username & password 등록이 필요하다.

구성을 보면

  • Username
  • Password
  • ID

이렇게 존재하며 여기서 Username은 레지스트리 아이디, Password 는 레지스트리 비밀번호, ID는 젠킨스에서 사용할 키 이다.

키 등록 방법

  • Manage Credentials
  • System -> Global credentials <Default 일 경우> -> 우측에 Add Credentials 클릭 -> Kind ( Username with password) 설정 후 위에서 말한 Username, Password, ID 등록

pipeline


stage('docker registry access') {
    steps {
        script {
            docker.withRegistry("<DOMAIN>","<YOUR_CREDENTIALS_ID>") { // -- 1
                def dockerImage = docker.build("<DOMAIN>/<REPOSITORY>/<IMAGE_NAME>:<TAG>", " .") // -- 2
                dockerImage.push() // -- 3
            }
        }
    }
}
  1. withRegistry

docker registry 접근하기 위해서는 로그인이 필요한 상황인데 이를 도와주는 인터페이스이다.
위에서 등록한 로그인하고자 하는 레지스트리 도메인은 좌측에, credentialsId 를 우측에 작성하면 된다.

  1. docker.build("image 관련 정보 (이미지이름, 태그, 레지스트리 도메인, 레포지토리)", "빌드 시 추가적인 arg 명령어를 작성할 수 있는 곳")

대략적으로 다시 설명하자면 좌측에는 이미지 이름과 태그 등 어떻게 등록할 것인가에 대한 내용을, 우측에는 추가적인 명령어를 작성하고자 했을 때 사용하면 된다.

  1. dockerImage.push()

build를 하게 되면 이미지 객체를 가지게 되는데 이에 대한 내용을 레지스트리에 등록하는 명령어이다.
여기서 push 안에 force 파라미터에 대한 boolean 값을 설정할 수 있는데 이는 제대로 동작하지 않는 것 같다. 기본적으로 force = true 이며 false 로 진행해도 true로 동작한다.

그래서 만일 force = true 의 동작을 미리 하고 싶다면 다음과 같이 구현하면 될 것 같다.

validation

stage('validate') {
    steps {
        script {
            docker.withRegistry('<DOMAIN>','<YOUR_CREDENTIALS_ID>') {
                def valid = false
                try {
                    sh "docker pull <IMAGE>:<TAG>"
                } catch(Exception e) {
                    valid = true
                }
                if (!valid) {
                    error("already ${IMAGE}:${TAG} exists")
                }
            }
        }
    }
}

원리는 간단하다. 푸쉬하고자 하는 image 와 tag 를 미리 레지스트리에 pull하여 해당 이미지 존재 유무를 판단하고 이에 대해서 error를 일으킬 것인지 아니면 그래도 동작하게 할 것인지 돌아가게 하면 된다.

반응형

'JVM > Jenkins' 카테고리의 다른 글

[Jenkins Pipeline] Environment Setting  (0) 2023.05.07
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함