ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Jenkins 설치 후 실행하기
    우아한 테크코스/이것저것 2020. 7. 30. 23:56
    반응형

    설치 환경

    ubuntu

    Ubuntu에 Docker 설치

    참고 링크 : https://docs.docker.com/engine/install/ubuntu/

    기존 설치 내역 제거

    $ sudo apt-get remove docker docker-engine docker.io containerd runc
    

    레파지터리 설정

    1. HTTPS를 통해 레파지터리를 사용할 수 있도록 적절한 패키지 인덱스 및 설치 패키지 업데이트

    $ sudo apt-get update
    
    $ sudo apt-get install -y \
        apt-transport-https \
        ca-certificates \
        curl \
        gnupg-agent \
        software-properties-common

    2. 도커의 공식 GPG 키 추가

    $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

    마지막 8자를 검색하여, 다음 키가 있는지 확인 : 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88

    $ sudo apt-key fingerprint 0EBFCD88
    pub   rsa4096 2017-02-22 [SCEA]
          9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
    uid           [ unknown] Docker Release (CE deb) <docker@docker.com>
    sub   rsa4096 2017-02-22 [S]

    3. 저장소 설정

    $ sudo add-apt-repository \
       "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
       $(lsb_release -cs) \
       stable"

    DOCKER ENGINE 설치

     1. apt 패키지 색인을 업데이트, Docker Engine 및 컨테이너 설치

     $ sudo apt-get update
     $ sudo apt-get install -y docker-ce docker-ce-cli containerd.io

    2. hello-world 이미지를 실행하여 Docker Engine이 올바르게 설치되었는지 확인

        - 이 명령의 경우, 테스트 이미지를 다운로드하여 컨테이너에서 실행. 컨테이너가 실행될 때 정보 메시지를 출력하고 종료함 

    $ sudo docker run hello-world

    Docker로 Jenkins 이미지 받기

    공식 문서 LINK

    1. docker network create 명령어로 Docker에서 브릿지 네트워크 생성

    $ sudo docker network create jenkins

    2. docker volumn create 명령어로 볼륨을 생성

    jenkins-docker-certs : Docker 데몬에 연결하는 데 필요한 Docker 클라이언트 TLS 인증서 공유

    jenkins-data : Jenkins 데이터 유지

    $ sudo docker volume create jenkins-docker-certs
    $ sudo docker volume create jenkins-data

    3. Jenkins 노드 내에서 Docker 명령을 실행하려면 Docker container run 명령을 사용하여 Docker:dind Docker 이미지를 다운로드하여 실행

    $ sudo docker container run \
      --name jenkins-docker \
      --rm \
      --detach \
      --privileged \
      --network jenkins \
      --network-alias docker \
      --env DOCKER_TLS_CERTDIR=/certs \
      --volume jenkins-docker-certs:/certs/client \
      --volume jenkins-data:/var/jenkins_home \
      --volume ~/deploy:/var/jenkins_home/deploy \
      --publish 2376:2376 \
      docker:dind

        - --name jenkins-docker

           : (선택) 이미지 실행에 사용할 Docker 컨테이너 이름을 지정, 기본적으로 Docker는 컨테이너의 고유 이름을 생성

        - --rm

           : (선택) Docker 컨테이너 (Docker 이미지의 인스턴스)가 종료되면 자동으로 제거

             여기에는 jenkinsci/blueocean아래 설명 된 컨테이너 에서 호출 될 때 Docker가 사용하는 Docker 이미지 캐시가 포함

        - --detach

           : (선택) 백그라운드에서 Docker 컨테이너를 실행

             이 인스턴스는 나중에 docker container stop jenkins-docker 명령어를 사용하여 중지하고,

             docker container start jenkins-docker 명령어를 사용하여 다시 시작할 수 있음.

             자세한 건 docker container 명령어 참고
        - --privileged

           : Docker에서 Docker를 실행하려면 현재 권한을 가진 액세스 권한이 있어야 제대로 작동

             이 요구 사항은 최신 Linux 커널 버전에서 완화 될 수 있음
        - --network jenkins

           : 이것은 이전 단계에서 생성된 네트워크 브릿지를 사용하는 것
        - --network-alias docker

           : 도커 컨테이너의 도커를 젠킨스 컨테이너 내의 호스트명 docker로 사용할 수 있게끔 설정
        - --env DOCKER_TLS_CERTDIR=/certs

           : 도커 서버에서 TLS 사용 실행 권한 있는 컨테이너의 사용 때문에, 공유 볼륨을 사용하는 것이 권장

             이 환경 변수는 도커 TLS 인증서가 관리되는 루트 디렉터리를 제어
        - --volume jenkins-docker-certs:/certs/client

           : 컨테이너 내부의 /certs/client 디렉터리를 위에서 만든 jenkins-docker-certsDocker 볼륨에 매핑
        - --volume jenkins-data:/var/jenkins_home

           : 컨테이너 내부의 /var/jenkins_home 디렉터리를 위에서 만든 jenkins-data Docker 볼륨에 매핑

             이렇게하면이 Docker 컨테이너의 Docker 데몬이 제어하는 ​​다른 Docker 컨테이너가 Jenkins의 데이터를 마운트 할 수 있음
        - --publish 2376:2376

           : (선택) host 시스템(서버)에 Docker 데몬 포트를 노출

             이 docker내부 Docker 데몬을 제어하기 위해 호스트 시스템에서 명령을 실행하는 데 사용
        - docker:dind

           : docker:dind 이미지 자체

             이 이미지는 다음 명령 docker image pull docker:dind을 사용하여 실행하기 전에 다운로드 할 수 있음

    4. 다음 도커 컨테이너 실행 명령을 사용하여 "jenkinsci/blueocean" 이미지를 다운로드하고 Docker에서 컨테이너로 실행

    $ sudo docker container run \
      --name jenkins-blueocean \
      --rm \
      --detach \
      --network jenkins \
      --env DOCKER_HOST=tcp://docker:2376 \
      --env DOCKER_CERT_PATH=/certs/client \
      --env DOCKER_TLS_VERIFY=1 \
      --publish 8080:8080 \
      --publish 50000:50000 \
      --volume ~/deploy:/var/jenkins_home/deploy \
      --volume jenkins-data:/var/jenkins_home \
      --volume jenkins-docker-certs:/certs/client:ro \
      jenkinsci/blueocean

        - --name jenkins-blueocean

           : (선택) jenkinsci/blueocean Docker 이미지 인스턴스의 Docker 컨테이너 이름을 지정

             docker container 명령으로 참조하기가 더 쉬워짐

        - --rm

           : Docker 컨테이너 (jenkinsci/blueocean 이미지의 인스턴스화)가 종료되면 자동으로 제거

             Jenkins를 종료 해야하는 경우 깔끔하게 유지

        - --detach

           : (선택) jenkinsci/blueocean 컨테이너를 백그라운드에서 실행하고 컨테이너 ID를 출력

             이 옵션을 지정하지 않으면 이 컨테이너에 대해 실행중인 Docker 로그가 터미널 창에 출력

        - --network jenkins

           : 이 컨테이너를 이전 단계에서 정의한 네트워크 jenkins에 연결

             이로써 이전 단계의 Docker 데몬은 호스트명을 통해 이 Jenkins 컨테이너를 사용할 수 있음

        - --env DOCKER_HOST=tcp://docker:2376

          --env DOCKER_CERT_PATH=/certs/client

          --env DOCKER_TLS_VERIFY=1

           : 이전 단계에서 도커 데몬에 연결하기 위해 docker, docker-compose 및 기타 도커 도구에서 사용하는 환경 변수를 지정

        - --publish 8080:8080

           : jenkinsci/blueocean 컨테이너의 포트 8080을 호스트 시스템의 포트 8080에 매핑

            첫 번째 숫자는 호스트의 포트를 나타내고 마지막 숫자는 컨테이너의 포트를 나타냄

            따라서 -p 49000:8080 옵션을 지정 하면 포트 49000을 통해 호스트 시스템의 Jenkins에 액세스하게 됨

        - --publish 50000:50000

           : (선택) jenkinsci/blueocean 컨테이너의 포트 50000을 호스트 시스템의 포트 50000에 매핑

             이는 JNLP 기반 Jenkins 에이전트를 하나 이상의 다른 기계에 설치한 경우 필요

             설정하면 jenkinsci/blueocean 컨테이너와 상호 작용 ("master" Jenkins server 또는 simply "Jenkins master" 역할을 함)

             JNLP 기반 Jenkins 에이전트는 기본적으로 TCP 포트 50000을 통해 Jenkins 마스터와 통신

             글로벌 보안 구성 페이지를 통해 Jenkins 마스터에서 이 포트 번호를 변경할 수 있음

             (예) JNLP 에이전트에 대한 Jenkins 마스터의 TCP 포트 값을 51000 으로 변경하려면 Jenkins를 다시 실행하고 (docker run )

                   "publish"옵션을  --publish 52000:51000로 지정.

                   첫 번째 값은 JNLP 기반 Jenkins 에이전트가 Jenkins 마스터와 통신하는 데 사용되는 Jenkins 마스터 호스트 시스템의 포트번호
                   마지막 값은 Jenkins 마스터에서 변경된 값과 일치
     

             Jenkins 2.217의 WebSocket 에이전트는 이 구성이 필요하지 않다는 점에 유의

        - --volume jenkins-data:/var/jenkins_home

           : 컨테이너 /var/jenkins_home 디렉터리를 jenkins-data라는 이름으로 Docker 볼륨 에 매핑

             /var/jenkins_home 디렉터리를 Docker 볼륨 에 맵핑하는 대신 시스템의 로컬 파일 시스템에 있는 디렉터리에 맵핑 할 수도 있음

             예) --volume $HOME/jenkins:/var/jenkins_home 옵션을 지정하면 컨테이너의 /var/jenkins_home 디렉터리가

                  로컬 시스템  $HOME의 jenkins 디렉터리 내의 하위 디렉토리 (/home/<your-username>/jenkins or /Users/<your-username>/jenkins)에 맵핑

                  이를 위해 소스 볼륨 또는 디렉토리를 변경하는 경우 위의 docker:dind 컨테이너에서 볼륨을 업데이트 해야 함

        - --volume jenkins-docker-certs:/certs/client:ro

           : /certs/client 디렉토리를 이전에 생성된 jenkins-docker-certs 볼륨에 매핑

            DOCKER_CERT_PATH 환경 변수에 의해 지정된 경로에서 Docker 데몬에 연결하는 데 필요한 클라이언트 TLS 인증서를 사용 가능

        - jenkinsci/blueocean

           : jenkinsci/blueocean 도커 이미지 자체.

            이 이미지가 아직 다운로드되지 않은 경우 이 docker container run 명령은 이미지를 자동으로 다운로드

            이 명령을 마지막으로 실행 한 이후 이 이미지에 대한 업데이트가 게시된 경우 이 명령을 다시 실행하면 게시된 이미지 업데이트가 자동으로 다운로드

            참고 : 이 Docker 이미지는 다음 docker image pull 명령을 사용하여 독립적으로 다운로드 (또는 업데이트) 할 수도 있음

                      docker image pull jenkinsci/blueocean

    세팅한 Jenkins Docker에 접근

    jenkins docker 컨테이너 접근

    $ sudo docker ps
    CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                                              NAMES
    3cf5225bd368        jenkinsci/blueocean   "/sbin/tini -- /usr/…"   2 minutes ago       Up 2 minutes        0.0.0.0:8080->8080/tcp, 0.0.0.0:50000->50000/tcp   jenkins-blueocean
    
    $ sudo docker container exec -it jenkins-blueocean bash
    bash-4.4$ 

    jenkins docker 로그 확인

    $ sudo docker container logs jenkins-blueocean

    Jenkins 설정하기

    공식 문서 LINK

    1. Jenkins 잠금 해제

    새 Jenkins 인스턴스에 처음 액세스하면 자동 생성 된 비밀번호를 사용하여 잠금을 해제하라는 메시지가 나타남

    기본 비밀번호는 jenkins 로그 별표 사이에 위치함, 로그 확인하여 복사 붙여넣기 후 Continue

    $ sudo docker container logs jenkins-blueocean
    // 전략
    *************************************************************
    *************************************************************
    *************************************************************
    
    Jenkins initial setup is required. An admin user has been created and a password generated.
    Please use the following password to proceed to installation:
    
    여기에 비밀번호가 위치
    
    This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
    
    *************************************************************
    *************************************************************
    *************************************************************
    // 후략

    2. 플러그인으로 Jenkins 사용 정의

    - 원하는 플러그인이 명확하지 않으면 Install suggested plugins 선택

    3. 첫 번째 관리자 생성

    세부 내용 입력

    Jenkins 실행

    :)

    반응형

    댓글

Designed by Tistory.