도커로 젠킨스 생성 후 도커 로그인하기

sang yun Lee·2024년 10월 12일
0

Devops 실습

목록 보기
21/21

개요


Jenkinsdocker container 로 생성한 다음 Jenkins 에서 docker build, docker push 를 할 일이 있어서 가이드를 만들었다.

간단한 개념 설명


최종 결과는 위의 그럼과 같다. 간단히 설명하자면, 순서는 아래와 같다.
1. 사용자의 OSdocker daemon설치/실행 한다.
2. docker cli 를 포함하는 Jenkins 이미지container 로 띄운다. 이 때에 Host OSdocker.sockMount 하여 docker cliHost OSdocker daemon 에 접근할 수 있도록 한다.
3. Jenkinsdocker build , docker push 를 한다.

방법


1. HOST OS 에 docker 설치

자신의 컴퓨터에 도커를 설치한다. 각자의 OS 에 맞게 설치한다.
Linux 가 아닐 경우 Docker Desktop 를 통해 설치하자.
나는 Ubuntu 여서 다음의 방법으로 설치했다.

# 1. 시스템 업데이트
$ sudo apt-get update

# 2. Docker 패키지 설치를 위한 필수 패키지 설치
$ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

# 3. Docker 공식 GPG 키 추가
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 4. Docker 저장소 추가
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 5. 패키지 목록 업데이트
$ sudo apt-get update

# 6. Docker 설치
$ sudo apt-get install docker-ce

# 7. Docker 서비스 상태 확인
$ sudo systemctl status docker

# 8. Docker 명령어를 root 없이 사용하도록 설정
$ sudo usermod -aG docker ${USER}

# 9. 다음 명령어로 새 세션을 시작
$ newgrp docker

# 10. docker 정상적으로 동작하는 지 확인
$ docker ps
> CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

2. HOST OS 에 Jenkins Container 생성하기

아래의 docker-compose.yaml 을 복사하여 원하는 경로 에 저장한다.

docker-compose.yaml

# docker-compose.yaml
version: '3.8'

services:
  jenkins:
    image: sororiri/jenkins:0.0.1
    container_name: jenkins-server
    user: root
    restart: always
    ports:
      - "8080:8080"
      - "50000:50000"
    volumes:
      - ./jenkins_home:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock

참고로 sororiri/jenkins:0.0.1 Dockerfile 은 다음과 같다.
docker-cli 를 젠킨스 이미지 안에 추가함을 통해 별도로 젠킨스가 실행한 뒤에 Docker-cli 를 설치하지 않아도 되게 하였다.

# Dockerfile
FROM jenkins/jenkins:lts
USER root
RUN apt-get update && apt-get install -y lsb-release
RUN curl -fsSLo /usr/share/keyrings/docker-archive-keyring.asc \
  https://download.docker.com/linux/debian/gpg
RUN echo "deb [arch=$(dpkg --print-architecture) \
  signed-by=/usr/share/keyrings/docker-archive-keyring.asc] \
  https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list
#---- docker-ce-cli
RUN apt-get update && apt-get install -y docker-ce-cli
#---- sshpass
RUN apt-get -y install sshpass
#---- locale
RUN apt-get install -y locales git \
    && localedef -f UTF-8 -i ko_KR ko_KR.UTF-8
ENV LC_ALL ko_KR.UTF-8
USER jenkins

Jenkins ImageDocker 로 실행한다.

# docker-compose.yaml 을 저장한 위치로 이동한 뒤 파일을 확인한다.
$ ls
> docker-compose.yaml

# docker 실행
$ docker compose up
> WARN[0000] /home/sori/temp/jenkins/docker-compose.yaml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion 
[+] Running 1/0
 ✔ Container jenkins-server  Recreated                                                                            0.1s 
Attaching to jenkins-server

Jenkins 초기화 시 다음과 같은 로그가 남는데, 여기에 초기 비밀번호 가 있다.

jenkins-server  | Please use the following password to proceed to installation:
jenkins-server  | 
jenkins-server  | a475e502f16a4a4cba1c6898311b3d5a  <= 이게 초기 비번임 ~!
jenkins-server  | 
jenkins-server  | This may also be found at: /var/jenkins_home/secrets/initialAdminPassword

표시되는 비밀번호를 복사한 후, http://localhost:8080 로 접속한다.

그럼 아래와 같은 페이지가 나오는데, 여기에 초기 비밀번호를 입력한다.

그러면 아래와 같은 페이지가 나오는데, 잘 모르겠으면 그냥 Install suggested plugin 으로 진행하면 된다.

이후 아래 페이지도 기입한 뒤에 save and continue 를 클릭한다.

다음의 페이지에도 기본값으로 되어있는 것으로 두고 Save and Finish 를 클릭한다.

3. Jenkins 에서 Docker 실행하기

1. Jenkins Job 생성

아래처럼 New Item 클릭한다.

원하는 이름으로 Job 이름을 설정하고 Freestyle projectJob 을 만든다.

그리고 아래와 같이 Execute shell 을 클릭한다.

이후 아래처럼 docker ps 를 입력 후 Save 버튼을 클릭 해 Job 을 생성한다.

2. Jenkins Job 실행하여 HOST-OS 의 Docker-daemon 에 접속하기

그 다음 Build NowJob 을 실행해본다.

이후 실행 결과를 보면 아래와 같이 docker cli 가 정상적으로 HOST 의docker-daemon 에 접속한 것을 확인할 수 있다.

3. docker login 을 위해 Credential 생성하기

$ docker ps 명령어가 적용되었다면 이제 docker 로그인을 진행해보자. 로그인, 비밀번호는 외부에 노출되면 안되므로 아래처럼 credentials 에 추가한다.
DockerHubUSERNAME(ID)PASSWORDcredentials 에 추가한다. creadentials ID 는 임의로 정하면 된다.

4. Docker Login 해보기

우선 아래와 같이 Job 을 새로 생성한다.

그리고 Job 설정을 아래와 같이 변경해보자.

관련 소스코드는 아래와 같다.

pipeline {
  agent any

  environment {
    dockerhub_cred = credentials('DockerHub-sororiri')
  }

  stages {
    stage('Hello') {
      steps {
          sh '''
            echo $dockerhub_cred_PSW | docker login -u $dockerhub_cred_USR --password-stdin
          '''
      }
    }
  }
}

이후 Job 을 실행해보면 아래와 같이 Login 이 정상적으로 동작하는 것을 확인할 수 있다.

궁금하신 점이 있으면 말씀해주세요.

0개의 댓글