본문 바로가기

[DevOps]/Jenkins

폐쇄망 Jenkins 구축기(jenkins, gitlab, maven, centos ...)

반응형

폐쇄망 Jenkins 구축기

상황

  • 클라우드 환경에서 타 클라우드로 옮겨야함.
  • 기존 배포 환경은 로컬에서 war, jar로 말은 후 수동으로 옮겨 배포하는 환경이었다.
  • 방화벽 신청(인터넷, 80 & 443)을하고 작업하면 편하지만 한두번 그냥 ftp, sftp로 파일 옮겨서 설치하다보니 오기가 생겨 모두 폐쇄망에서 작업을 진행.
  • 배포할 서버, jenkins서버, gitlab서버가 모두 다르게 구성되어있음.

환경

  • jenkins
  • gitlab
  • maven, gradle
  • centos
  • jdk 1.8, jdk 11

1. jdk 설치

  1. 프로젝트마다 jdk를 여러개 써야하기 때문에 프로젝트에 맞는 각 jdk들을 로컬에서 다운로드한다. (https://github.com/AdoptOpenJDK) openjdk
  2. 클라우드로 다운로드 받은 jdk를 옮겨준뒤 압축을 풀어준다.
    ex.
1. 경로 설정
cd /usr/lib
mkdir java
cd java

2. 압축 풀기
tar -zxvf [다운로드받은경로]/OpenJDK8U-jdk_x64_linux_8u292b10.tar.gz
  1. 환경변수 설정
    어차피 jenkins에서 프로젝트마다 버전별로 jdk 경로를 다시 잡아줄것이긴 하지만 기본으로 쓸 java home 설정을 해준다.
1. 환경변수 설정
vim /etc/profile

2. 가장 아래에 내용 추가
export JAVA_HOME=/usr/lib/java/openjdk-8u292-b10
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=$CLASSPATH:$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar

3. 적용
source /etc/profile

이후 java -version을 입력해 잘 설정되었는지 확인한다.

2. gitlab 설치

  1. OS에 맞는 설치파일 다운로드 (https://packages.gitlab.com/gitlab/gitlab-ce/)
    나는 gitlab-ce-15.8.0-ce.0.el7.x86_64.rpm를 받았다. 자신의 클라우드 os에 맞는 버전을 다운로드하면된다.
  2. 클라우드로 옮겨준뒤 터미널에서 설치를 시작한다.
  • 설치
sudo yum localinstall -y gitlab-ce-15.8.0-ce.0.el7.x86_64.rpm

설정파일 수정

cd /etc/gitlab/
vi gitlab.rb

여기서 두가지를 보통 수정해줘야한다.

  • 접속 IP 및 PORT 설정.
    vi에서 / 입력후 external_url 입력해 찾으면 편하다.(다음 찾기 n)
    추후 gitlab사용자들이 clone시 접속할 url을 작성해주면된다. localhost라고 적으면 안되며 클라우드 서버 접속하는 IP와 gitlab을 띄울 포트를 적어주면된다.
external_url 'http://10.999.999.999:9999'
  • 저장 디렉토리 변경.
    vi에서 / 입력후 git_data_dirs 입력해 찾으면 편하다.(다음 찾기 n)
    깃 데이터들이 저장될 곳을 설정해준다.
git_data_dirs({
  "default" => {
    "path" => "/home/gitlab/git-data"
   }
})
  1. 변경 내용 적용
sudo gitlab-ctl reconfigure
  1. 확인 및 로그인
  • 같은 망의 로컬pc에서 자신이 설정한 주소(http://10.999.999.999:9999)로 들어가 정상적으로 작동하는지 확인한다.
  • 초기 비밀번호의 경우
cat /etc/gitlab/initial_root_password  | grep Password:

로 확인가능하다. 아이디는 root이다.

3. jenkins 설치

  1. 파일 다운로드.
    젠킨스 공식 홈페이지(https://www.jenkins.io/download/)에서 war파일을 다운로드한다.

  2. 클라우드로 옮겨 준뒤 원하는 위치에서 실행시켜준다.
    나는 /home/jenkins를 만들어 준뒤 이곳에 jenkins.war를 넣고 스크립트를 만들어 실행해주었다.

    • jenkins 폴더 생성
    cd /home
    mkdir jenkins
    • 실행 스크립트 생성
      원하는 포트와 로그 파일 경로를 설정해 주고 실행했다.
    vi startup.sh
    
    #! /bin/sh
    
    nohup java -jar jenkins.war --httpPort=12345 >> /home/jenkins/log/jenkins_$(date +\%m\%d).log 2>&1 &
  • 실행
    ./startup.sh
  1. 실행 후 url로 접속하게되면 초기에 이것저것 설치되는데 설치되는 기본 경로는
    /root/.jenkins에 위치한다.

4. maven & gradle 등 빌드도구 설치

- maven 설치

  1. https://archive.apache.org/dist/maven/maven-3/3.9.0/binaries/에서 apache-maven-3.9.0-bin.tar.gz파일을 다운로드 받고 클라우드로 옮겨준다.(아직 maven4 버전은 alpha 버전이다.)
  2. /usr/local로 파일을 옮겨준뒤 압축을 해제한다.tar xvfz apache-maven-3.9.0-bin.tar.gz
  3. 환경변수 등록
    vi /etc/profile
#maven
export MAVEN_HOME=/usr/local/apache-maven-3.9.0

#common
export PATH=$PATH:$MAVEN_HOME/bin
  1. 적용 source /etc/profile
  2. 잘 적용되었는지 확인 mvn -v

- gradle 설치

  1. https://gradle.org/releases/에서 zip 파일 다운로드 후 클라우드서버로 파일 이동
  2. 폴더 생성 및 압축해제
폴더생성
mkdir /opt/gradle

압축해제
unzip -d /opt/gradle /tmp/gradle-${VERSION}-bin.zip
  1. 환경변수 등록
    vi vi /etc/profile.d/gradle.sh
export GRADLE_HOME=/opt/gradle/gradle-${VERSION}
export PATH=${GRADLE_HOME}/bin:${PATH}
  1. 실행권한 부여
    chmod +x /etc/profile.d/gradle.sh
  2. 변경사항 적용
    source /etc/profile.d/gradle.sh
  3. 확인
    gradel -v

5. jenkins 플러그인 설치

기본 설치되는 플러그인들 외 gitlab, maven, ssh 등 연동하기 위해 필요한 플러그인들이 있다.
젠킨스 홈 화면 - 젠킨스 관리 - 플러그인 관리에서 다운로드하는걸 추천한다.
플러그인들을 설치한지 좀 지나... 어떤것들이 기본으로 설치된 플러그인들인지 정확하게 기억이 나지 않지만 필요한것들 위주로 적어본다.

이 플러그인들을 모두 '로컬'에 젠킨스를 한 번 더 설치하고 다운받아야한다.
물론 플러그인 파일만 받을 수도 있지만 로컬에 젠킨스 설치하고 받는게 더 편하다.(플러그인 하나 설치시 함께 설치되는 플러그인들도 있음.)
설치 완료 후 나의경우 로컬은 OS 윈도우C:\ProgramData\Jenkins\.jenkins\plugins에서 설치된 파일들 확인이 가능하다.
경로에 가보면 확장자가 .jpi인 확장자 파일들이 있는데 이걸 모두 복사 후 클라우드 서버의 /root/.jenkins/plugins/로 옮겨주고 확장자를 .hpi로 바꿔줘야한다. 그 후 젠킨스를 재시작하면 자동으로 플러그인들이 설치될 것이다.

  • gitlab연동을 위해 추가로 설치해야할 플러그인
    • Generic Webhook Trigger Plugin
    • GitLab Authentication plugin
    • GitLab Branch Source Plugin
    • Gitlab Merge Request Builder
    • GitLab Plugin
  • maven을 위해 추가로 설치해야할 플러그인
    • Maven Info Plugin
    • Maven Invoker plugin
    • Maven Release Plug-in Plug-in
    • Maven Repository Server Plugin
  • gradle을 위해 추가로 설치해야할 플러그인
    • Gradle
    • Gradle RepoVersion
    • ArtifactoryVersion
  • SSH배포를 위해 설치해야할 플러그인
    • Publish Over SSH
    • SSH Build Agents plugin
    • SSH server
  • 기타 플러그인
    • Ant Plugin
    • Build Timeout
    • Command Agent Launcher Plugin
    • LDAP Plugin
    • PAM Authentication plugin
    • Pipeline
    • Timestamper
    • Workspace Cleanup Plugin

젠킨스 재실행

젠킨스 실행중인 pid 확인
ps -ef | grep jenkins

젠킨스 kill
kill -9 {확인한젠킨스pid}

젠킨스 실행
./startup.sh

6. jenkins Maven(또는 Gradle), jdk, gitlab 접속정보, ssh 등... 설정

젠킨스 홈 - Jenkins 관리 - Global Tool Configuration에서 한 번 설정해 두면 프로젝트 마다 쉽게 불러와서 설정이 가능하다.

- Maven 설정 및 Gradle 설정

  1. Maven(또는 Gradle) 항목으로 이동
  2. Add Maven(또는 Add Gradle) 클릭
  3. name에 설치한 maven(또는 Gradle) 버전으로 이름 입력(추후 구분 편하게 하기 위함)
  4. MAVEN_HOME(또는 GRADLE_HOME)에 실제 클라우드 서버에 설치한 경로 입력
    etc. Add Maven(또는 Add Gradle)를 눌러 여러 버전 입력

- JDK 설정

  1. jdk 항목으로 이동
  2. Add jdk 클릭
  3. name에 설치한 jdk 버전으로 이름 입력(추후 구분 편하게 하기 위함)
  4. JAVA_HOME에 실제 클라우드 서버에 설치한 경로 입력
    etc. Add jdk를 눌러 여러 버전 입력

- gitlab 설정

  1. gitlab에 jenkins용 계정 생성
  2. jenkins홈 - jenkins관리 - Credentials에 username 및 password 입력

- SSH Server 설정
소스코드 빌드 후 배포할 서버의 정보를 입력하는 부분이다.

  1. 젠킨스 홈 - Jenkins 관리 - 시스템설정

  2. Publish over SSH 항목으로가서 SSH Servers 항목에 배포대상 서버 정보 입력.

    • Name : 배포대상서버명
    • Hostname : IP주소
    • Username : 배포대상서버 로그인 ID
    • Remote Directory : 빌드된파일을 배포대상서버의 어디로 보낼건지 입력.
  3. 고급 버튼 클릭 후 배포대상서버의 로그인 비밀번호 입력.

7. Jenkins 프로젝트 생성 및 기본 설정

추가 설정들도 있겠지만 가장 기본적인 설정만 세팅을 정리해놓았다.

  1. 젠킨스홈에서 왼쪽의 + 새로운 Item 클릭
  2. 프로젝트에 맞게 설정 진행(6번에서 설정한 항목이 보여져 쉽게 선택이 가능하다.)
    • JDK : 프로젝트에 맞는 jdk 버전 선택
    • 소스코드관리 : git 선택
      • Repository URL : 깃랩에서 clone할 프로젝트의 주소
      • Credentials : 깃랩 접속정보
      • Branches to build : 깃랩에서 배포할 브랜치(ex. */deploy)
      • Test Connection : Success 가 나오면 잘 연결된 것이다.
    • Build Steps : Add build step을 통해 빌드 절차 입력
      • Invoke top-level Maven targets
        • Maven Version : 빌드에 사용할 maven 정보입력
        • Goals : 클린 후 패키지
          clean
          package
    • 빌드 후 조치 : 빌드된 war 또는 jar 파일을 보낼 서버 정보 입력
      • add를 통해 Send build artifacts over SSH 선택
      • add server 클릭 후 SSH Server에서 배포할 서버 선택
      • add transfer set 클릭
        • Source files : 젠킨스에서 빌드 후 배포될 war 또는 jar 파일 정보 입력(ex. target/myproject-1.0.0.war)
        • Remove prefix : 접두사 제거(ex. target)
  3. 아마 이후 실행 후에 빌드시 에러가 날 것이다.
    젠킨스 프로젝트 - 고정링크 - Console Output을 통해 에러 파악이 가능하다.
    보면 젠킨스는 다음과 같은 절차를 수행하고 있다.
    1. 목적지 경로로 이동 /root/.jenkins/workspace/myjenkinsproject
    2. gitlab에서 소스코드 클론
    3. 소스코드 빌드
      /usr/local/apache-maven-3.9.0/bin/mvn -Dmaven.repo.local=/root/.jenkins/workspace/myjenkinsproject/ .repository clean package
      여기서 에러가 날것이다. 각 프로젝트마다 maven repository를 따로 갖고 빌드를 하기 때문에 폐쇄망이라 로컬(C:\Users\user\.m2)에서 repository를 복사해올 필요가 있다.
      로컬의 repository를 잠시 이름 바꾸고 로컬에서 프로젝트를 clean package 하면 필요한 repository만 생성될 것이다. 이것들을 jenkins가 설치된 클라우드서버의 /root/.jenkins/workspace/myjenkinsproject/.repository에 넣어주면 문제 없이 실행된다.

8. 여기까지 왔으면 배포대상서버에

myproject-1.0.0.war 가 잘 생성되었을 것이다.
이제

반응형

'[DevOps] > Jenkins' 카테고리의 다른 글

Jenkins home 위치  (0) 2023.02.20