yoursyun

CentOS7에서 Docker 로 Jenkins 서비스 등록 ( gradle, github 이용 ) 본문

environment/java

CentOS7에서 Docker 로 Jenkins 서비스 등록 ( gradle, github 이용 )

yoursyun 2020. 12. 2. 13:51

설치 전 docker, docker-compose 가 설치되어 있어야 합니다.

Dockerfile

FROM jenkins:latest

        MAINTAINER kei < kei@gmail.com >

        ENV JENKINS_OPTS --httpPort=18080

        ENV JENKINS_SLAVE_AGENT_PORT 50001

        EXPOSE 18080 50001

 

        USER root

        RUN apt-get update && apt-get -y install vim

 

docker-compose.yml

# docker-compose compile version

version: '3.1'

 

# docker container == service

services:

  jenkins:                           # service name

    container_name: jenkins

    image: jenkins:latest         # using docker image

    restart: always

    ports:

      - 18080:18080

      - 50001:50001

    privileged: true

    volumes:

      - /docker/jenkins/jenkins_home:/var/jenkins_home

    user: root

 

* 참고 - 데비안 locale 설정 :

gpt-get install –y locales

dpkg-reconfigure locales

한글 ko_KR, UTF-8 선텍

기본 locale 선택

기본 locale 확인  cat /etc/default/locale

 

위 두개 파일 실행후, localhost:18080 에서

의 화면이 보이면 정상 설치 된 것입니다.

 

* 참고 외부방화벽오픈

 firewall-cmd --zone=public --permanent --add-port=18080/tcp

 filewall-cmd --reload

Unlock을 위해 위 화면의 위치로 이동하여 입력합니다.

 

[root@pororicom jenkins]# vi jenkins_home/secrets/initialAdminPassword

이후 설치를 위해 기본 플러그인 설치로 진행합니다. ( 2.249.3 버전은 GitHub 포함되어 있음 )

플러그인 설치에 오류가 있는경우, dockerjenkins 버전이 낮은 경우임으로, ( 도커 이미지의 젠킨스는 버전이 낮습니다. 2020.12 기준 ) : [root@pororicom jenkins]# docker logs jenkins 로 확인한다.

 

가장 최신 버전의 jenkins 버전으로 교체 합니다.

[root@pororicom jenkins]# docker exec -it -u 0 jenkins bash #관리자권한으로 컨테이너에 들어갑니다.

최신버전다운로드

root@bd0437f5e3b8:/# wget http://updates.jenkins-ci.org/download/war/2.249.3/jenkins.war

덮어쓰기

root@bd0437f5e3b8:/# mv ./jenkins.war /usr/share/jenkins

실행권한변경

root@bd0437f5e3b8:/# chown jenkins:jenkins /usr/share/jenkins/jenkins.war

도커 재실행

[root@pororicom jenkins]# docker restart jenkins

 설치이후 관리자 계정을 만든다. 

배포하고자하는 서버의 SSH 연결을 위해 플러그인을 설치되었는지 확인한다.

기본 2.249.3 버전은 플러그인 조회가 되질 않았다. https://updates.jenkins.io/download/plugins/publish-over-ssh/

을 통해 플러그인 업데이트 파일을 다운로드 받고 수동 설치를 진행하였다.

위 플러그인 설치 후, Jenkins 관리 > 시스템 설정에 아래와 같이 입력하여 서버와의 연결을 등록해준다.

연결설정을 완료후에 새로운Item” 메뉴 에서 Freestyle project로 생성한다.

빌드 배포 프로젝트명을 demo 로 정했다. demo 작업 진행중에 나갔다면 메뉴 구성에서 다시 확인 할 수 있다.

젠킨스를이용한 Git Hub > Jar or War 배포가 목표이므로, 아래와 같이 구성한다.

Credentials 을 이용하여, 인증정보등을 작성한다. 여기서 Branch Specifier 빌드할 브렌치명을 작성해준다. ( 개발 데모용 으로 작성함 ) , Add 눌러 아래와 같이 Git 인증정보를 입력한다.

Build

이중 Invoke Gradle script Send files or execute commands over SSH 이용한다.

 

Invoke Gradle script

Jenkins 통합환경설정에서 Global Tools Configuration 에서 Gradle 다운받아 사용가능하다.

하지만 스프링부트 프로젝트에서 Git push 시에 Gradle.wrapper 올렸다면 따로 설정할 필요없이 사용이 가능하다.

-x test : 테스트에 대해 빌드를 하지않는다.

 Build 명령시 테스트도 빌드하고자 한다면 build.gradle test { useJUnitPlatform() } 이 추가 되어있어야한다.

Make gradlew executable : 체크하지 않으면 permission 오류 발생합니다.

 

아래는 빌드된 jar 파일을 배포대상서버로 전송하는 설정 화면이다.

 

Source files : build/libs/*.jar

Jenkins workspace 기준으로 git에서 pull 가져온 Springboot앱의 루트경로이다.

보통 build/libs 안에 들어가 있다.

 

Remote Directory : /webapp/demo

원격 서버의 디렉터리이다. 원격서버의 SSH 로 설정한 폴더 기준으로 작성한다.

현재 Jenkins관리 > 시스템설정 > publish over SSH ( 배포기준서버 ) > Remote Directory : /webapp

아래 와 같이 /webapp/demo jar 파일을 배포할 위치를 설정 해주었으며, 서버에도 해당 directory가 존재해야한다.

 

배포대상서버 구조

[root@pororicom /]# tree webapp

webapp

├── demo

   └── init_server.sh

└── orgsrv

 

Exec command : 파일전송후 실행할 명령어를 입력한다.

Init_server.sh

echo "demo application 의 구동중인 pid 확인 중"

CURRENT_PID=$(ps -ef | grep java | grep demo* | awk '{print $2}')

 

echo "$CURRENT_PID"

 

if [ -z $CURRENT_PID ]; then

    echo "demo application 의 구동이 확인되지 않습니다."

    else

        echo "> kill -9 $CURRENT_PID" kill -9 $CURRENT_PID

        sleep 10

fi

 

echo "구동중인 demo application 을 종료하였으며, 배포를 진행합니다."

nohup java -jar /webapp/demo/demo-0.0.1-SNAPSHOT.war >> /webapp/demo/logs/demo.log &

 

* 참고 nohup “no hangups”으로 터미널이 종료되어도 실행은 멈추지 않는다. & : 백그라운드 실행을 의미

       Jar 파일 배포를 하려 했으나, 개발소스가 JSP를 지원 해야 하므로 war 파일로 배포 되도록 변경되어 있습니다.

이후 해당 빌드 프로젝트에 들어가서 Build Now버튼으로 빌드 및 배포까지 정상적으로 이뤄지는지 확인합니다. 오류가 발생하는 등의 문제는 오류 정보를 자세히 확인하여 처리 해야합니다.

반응형