ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 오픈소스로 구성하는 데브옵스 시스템 - Jenkins로 Docker 배포 구성
    DevOps 2017. 6. 6. 23:54

    처음 빌드와 배포 업무를 담당 했을 때 수작업을 통해 일일이 배포를 하던 시절이 있었습니다.


    그러다 매번 같은 파일을 업로드 하는 시간을 줄이고자 rsync를 이용하여 변경된 파일만 여러 서버에 동시에 배포하는 스크립트를 활용 했었습니다.


    한단계 더 나아가 svn을 이용하여 배포에 대한 리비전 관리를 하였고, 배포중 문제가 발생하면 원래 잘되던 리비전으로 롤백을 하는 방식을 구성 했습니다.


    그러나 최근에는 Jenkins가 CI툴의 대세가 된 듯 합니다.

    워낙에 다양한 플러그인이 존재하고 있어 왠만한 기능 구현이 다 된다고 보면 됩니다.


    우리도 개발소스의 빌드부터 Docker 이미지의 생성 및 배포까지의 모든 자동화 작업을 위해 Jenkins를 구축해 보도록 하겠습니다.


    다양한 설치 방법이 있지만 가장 심플하게 yum을 이용해 보도록 하겠습니다.


    • Jenkins 설치를 위한 yum repo 설지
    wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
    rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
    • Jenkins 설치
    yum install jenkins
    • Jenkins 서비스 시작
    service jenkins start


    서비스를 시작하고 아래 URL로 접속하면 초기 셋팅 화면이 나타납니다.

    http://Jenkins_install_host:8080


    화면에 나타난 경로에 파일을 열어보면 administrator 패스워드를 확인 가능 합니다.


    cat /var/lib/jenkins/secrets/initialAdminPassword


    그리고 다음으로는 Jenkins의 플러그인을 설치하는 화면이 나타납니다.

    기본적으로 추천하는 플러그인을 설치하고 이후에 필요한 플러그인은 따로 설치를 하도록 하겠습니다.



    해당 버튼을 클릭하면 플러그인 설치가 자동으로 진행 됩니다.



    플러그인 설치가 완료되면 Admin User를 생성합니다.



    이제 Jenkins를 사용할 수 있는 준비를 마쳤습니다.



    Jenkins의 초기 화면 입니다.



    그리고 앞서 이야기 했듯이 Jenkins를 이용하여 빌드와 Docker 이미지 생성 및 배포를 위해 아래와 같이 추가 플러그인을 설치 합니다.

    혹시 회사에서 Active Directory로 계정 관리를 하고 있다면 해당 플러그인도 같이 설치를 합니다.


    플러그인 명 

     용도

     Maven Integration plugin

     Maven 라이브러리를 사용하는 java 프로그램 빌드 및 배포를 위해 필요

     GitLab Plugin

     GitLab의 빌드 트리거를 이용하여 jenkins 빌드를 하기 위해 필요

     Gitlab Authentication plugin

     Jenkins에서 Gitlab에 인증접속을 위해 필요

     docker-build-step

     docker의 명령어를 jenkins에서 사용하기 위해 필요

     Active Directory plugin

     Active Directory의 계정으로 jenkins 인증을 하기 위해 필요


    플러그인이 설치되면 Docker 빌드 및 Repository Push를 위한 설정을 해줘야 합니다.


    Jenkins 관리 > 환경설정에서 Docker Builder 섹션을 입력 합니다.

    • Docker URL : Docker 빌드를 실행할 서버 입니다. Jenkins에서 Remote API를 이용하여 Docker 명령어를 실행 합니다. Jenkins가 설치 된 서버에 같이 설치하는 것을 추천 합니다.
    • Docker version : Docker 빌드에 사용되는 Dcoker 버전 입니다.
    위 셋팅을 하고 Test Connection을 입력하면 저처럼 에러가 발생하는 분들이 있을 껍니다.
    이유는 Docker Remote를 사용하기 위한 설정을 하지 않았다던가, 해당 포트가 방화벽에서 차단된 경우 일 껍니다.

    Docker가 실행 될 때 해당 포트가 오픈 될 수 있도록 등록해 줍니다.
    vi /usr/lib/systemd/system/docker.service

    ExecStart=/usr/bin/dockerd-current \

              --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \

              --default-runtime=docker-runc \

              --exec-opt native.cgroupdriver=systemd \

              --userland-proxy-path=/usr/libexec/docker/docker-proxy-current \

              $OPTIONS \

              $DOCKER_STORAGE_OPTIONS \

              $DOCKER_NETWORK_OPTIONS \

              $ADD_REGISTRY \

              $BLOCK_REGISTRY \

              $INSECURE_REGISTRY \

              -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock



    daemon service 파일가 변경 되었기에 reload를 실행합니다.

    systemctl daemon-reload


    그리고 Docker 서비스를 재시작 해줍니다.

    systemctl restart docker.service


    이제 모든 설치 구성이 완료 되었습니다.


    빌드 구성 및 Docker 배포에 대한 Jenkins 구성은 추후에 gitlab과 nexus repository 설치가 완료되고 다시 한 번 다뤄보도록 하겠습니다.

Designed by Tistory.