[Jenkins] Jenkins GitLab 프로젝트 연동하기 02

Project Access Tokens 발급 후 해당 Tokens으로 GitLab 서버를 추가하는 작업을 완료하였고,
이제 GitLab 프로젝트 연동과 간단히 Pipeline을 동작하는 설정을 진행해보도록 하겠습니다.

 

 

 

Pipeline 생성

Jenkins의 Pipeline을 통해 프로젝트 소스코드 빌드 및 배포를 설정할 수 있습니다.

새로운 Item을 Pipeline으로 추가합니다.

 

 

사전에 추가한 GitLab 서버 연결 설정을 지정합니다.

 

 

Jenkinsfile을 사용하여 Pipeline을 설정하기 위해 Pipeline script from SCM 설정을 추가합니다.
연동할 GitLab 프로젝트의 URL을 입력 후 연동 시 사용할 Credentials을 추가 등록하기 위해 Add 버튼을 클릭합니다.

 

 

Username with password 항목에 GitLab 계정과 Token 값을 입력 후 추가합니다.

 

 

정상적으로 Token 값으로 인증이 완료되면 Repository URL 항목에 에러가 팝업되지 않습니다.

 

 

Jenkinsfile을 사용하도록 설정 후 저장하면 GitLab 프로젝트와 연동된 Pipeline 생성이 완료됩니다.

 

 

Pipeline 테스트

Jenkinsfile에 간단히 테스트 코드를 작성하여 연동한 GitLab 프로젝트에서 Pipeline이 동작하는지 확인합니다.

 

Jenkinsfile 이름의 파일을 생성 후 프로젝트에 추가하고, 아래와 같이 간단히 echo 명령어로 TEST를 출력하도록 Jenkinsfile에 코드를 추가하였습니다.

pipeline {
	agent any

	stages {
		stage('test') {
			steps {
				sh '''
					echo "TEST"
				'''
			}
		}
	}
}

 

Jenkins Pipeline 화면에서 지금 빌드 버튼을 클릭하여 빌드를 테스트합니다.

왼쪽하단에 진행상태가 표시되며 정상적으로 완료되면 체크 표시가 나옵니다.



해당하는 빌드의 Console Output을 확인하면 아래와 같이 상세 동작 로그를 확인하실 수 있습니다.

 

 

Jenkins에서 GitLab 프로젝트와 연동 후 간단히 Pipeline이 동작하는 것을 확인해보았습니다.
다음 설정에서는 WebHook 설정을 통해 Event를 받으면 자동으로 빌드되도록 설정을 진행해보도록 하겠습니다...! 끝...!

 

 

 

[Jenkins] Jenkins GitLab 프로젝트 연동하기 01

Jenkins에서 GitLab, GitHub과 같은 Git Repository와 연동하여 프로젝트를 관리할 수 있습니다.
그중 GitLab 프로젝트와 연동하기 위해서는 어떤 설정이 필요한지 알아보고, 간단히 Pipeline을 작성하여 구동시켜보는 것까지 해보도록 하겠습니다.

 

 

Project Access Tokens 생성

GitLab 서버와 연동하기 위한 Project Access Tokens이 필요하며 GitLab 프로젝트 관리 페이지에서 발급합니다.

 

GitLab 프로젝트의 Settings 메뉴에서 Access Tokens 메뉴를 선택합니다.

Token name과 Expiration date를 설정하고 Select scopes는 api를 선택 후 발급 버튼을 클립합니다.

 

 

발급한 Token은 복사 후 Jenkins에서 GitLab 서버를 등록할 때 사용합니다.

 

 

GitLab 서버 추가

Jenkins 관리 페이지에서 GitLab 서버를 추가해줍니다.

 

시스템 설정 페이지 하단에 있는 GitLab 설정에서 서버를 추가할 수 있습니다.
GitLab 서버와 연동 시 Credentials이 필요하며 별도로 추가한 Credentials이 있다면 사용하고 없다면 추가 등록하기 위해 Add 버튼을 클릭합니다.

 

 

사전에 발급한 Project Access Tokens을 GitLab API token으로 설정하고 등록합니다.

 

 

설정이 완료되면 Test Connection 버튼을 클릭하여 정상적으로 Success 로그가 출력되는지 확인합니다.

 

 

Project Access Tokens 발급 후 해당 Token으로 GitLab 서버를 추가하는 작업을 완료하였습니다.

다음에는 GitLab 프로젝트와 연동하는 설정을 진행해보도록 하겠습니다...! 끝...!

 

 

 

[Jenkins] Jenkins GitHub 프로젝트 연동하기 03

GitLab 프로젝트 연동과 간단히 Pipeline을 동작하는 설정을 완료하였고, 이제 WebHook을 연동하여 Commit 등의 Event 시 자동으로 Jenkins Pipeline이 동작되도록 설정해보도록 하겠습니다.

 

 

 

WebHook 설정

Jenkins에서 GitHub WebHook 연동을 위해 GitHub Integration 플러그인을 설치합니다.

 

 

설정하고자하는 프로젝트 Pipeline 상세 설정의 Build Triggers 설정 중 GitHub hook trigger for GITScm polling 항목을 체크 후 저장합니다. 해당 설정은 GitHub으로부터 WebHook 이벤트를 받고자하는 설정입니다.

 

 

GitHub에서는 설정하고자하는 프로젝트의 Webhooks 설정을 추가합니다.

 

 

Playload URL 주소는 "http://{{Jenkins 서버 주소}}/github-webhook/" 값으로 설정합니다.

 

 

설정 완료 후 정상적으로 Webhook 연결이 완료되면 Webhooks 설정에 정상(체크) 표시가 활성화됩니다.

 

 

Webhook 연결의 상세로그를 확인하려면 Webhook 선택 후 Recent Deliveries를 선택하면 Ping Check에 대한 상세로그를 확인할 수 있습니다.

 

 

 

 

WebHook 테스트

WebHook 연동 설정이 완료되었으므로 해당 프로젝트에서 소스 코드 수정 및 Commit 후 자동으로 Pipeline이 동작하는지 확인합니다. Pipeline 관리 페이지를 열어둔 상태에서 프로젝트에 Commit을 해봅니다.


WebHook 연동 설정을 통해 자동으로 Pipeline 빌드가 실행됩니다.

 

Pipeline 빌드가 완료되면 아래와 같이 빌드 상태를 확인할 수 있습니다. 별도로 지금 빌드 버튼을 클릭하지 않고도 자동으로 빌드가 실행되고 성공했음을 확인할 수 있습니다.

 

 

 

지금까지 Jenkins에서 GitHub 프로젝트와의 연동과 WebHook을 통한 Pipeline 자동화 구축 작업을 완료하였습니다...! 끝...!

 

 

 

 

[Jenkins] Jenkins GitHub 프로젝트 연동하기 02

Personal Access Tokens 발급 후 해당 Tokens으로 GitHub 서버를 추가하는 작업을 완료하였고,

이제 GitHub 프로젝트 연동과 간단히 Pipeline을 동작하는 설정을 진행해보도록 하겠습니다.

 

 

 

Pipeline 생성

Jenkins의 Pipeline을 통해 프로젝트 소스코드 빌드 및 배포를 설정할 수 있습니다.
새로운 Item을 Pipeline으로 추가합니다.

 

설정하고자하는 GitHub 프로젝트를 등록합니다.

 

 

Jenkinsfile을 사용하여 Pipeline을 설정하기 위해 Pipeline script from SCM 설정을 추가합니다.
연동할 GitHub 프로젝트의 URL을 입력 후 연동 시 사용할 Credentials을 추가 등록하기 위해 Add 버튼을 클릭합니다.

 

 

Username with password 항목에 GitHub 계정과 Token 값을 입력 후 추가합니다.

 

 

Jenkinsfile을 사용하도록 설정 후 저장하면 GitHub 프로젝트와 연동된 Pipeline 생성이 완료됩니다.

 

 

Pipeline 테스트

Jenkinsfile에 간단히 테스트 코드를 작성하여 연동한 GitHub 프로젝트에서 Pipeline이 동작하는지 확인합니다.


Jenkinsfile 이름의 파일을 생성 후 프로젝트에 추가하고, 아래와 같이 간단히 echo 명령어로 TEST를 출력하도록 Jenkinsfile에 코드를 추가하였습니다.

pipeline {
     agent any

     stages {
          stage('test') {
               steps {
                    sh '''
                         echo "TEST"
                    '''
               }
          }
     }
}

 

 

Jenkins Pipeline 화면에서 지금 빌드 버튼을 클릭하여 빌드를 테스트합니다.
빌드 진행상태는 Stage View 화면에 출력되며 정상적으로 빌드되는 것을 확인하실 수 있습니다.

 

 

해당하는 빌드의 Console Output을 확인하면 아래와 같이 상세 동작 로그를 확인하실 수 있습니다.

 

 

Jenkins에서 GitHub 프로젝트와 연동 후 간단히 Pipeline이 동작하는 것을 확인해보았습니다.
다음 설정에서는 WebHook 설정을 통해 Event를 받으면 자동으로 빌드되도록 설정을 진행해보도록 하겠습니다...! 끝...!

 

 

 

[Reference]

[Jenkins] Jenkins GitHub 프로젝트 연동하기 01

Jenkins에서 GitLab, GitHub과 같은 Git Repository와 연동하여 프로젝트를 관리할 수 있습니다.

그중 GitHub 프로젝트와 연동하기 위해서는 어떤 설정이 필요한지 알아보고, 간단히 Pipeline을 작성하여 구동시켜보는 것까지 해보도록 하겠습니다.

 

 

Personal Access Tokens 발급

GitHub 서버와 연동하기 위한 Personal Access Tokens을 발급합니다.

 

Profile에서 아래쪽에 Developer settings 메뉴를 선택합니다.

 

Tokens 메뉴에서 Token 신규 발급 버튼을 클릭합니다.

 

Token 이름과 만료기간을 설정하고,

 

Scope를 아래와 같이 설정 후 Token을 발급합니다.

 

 

발급한 Token은 복사 후 Jenkins에서 GitHub 서버를 등록할 때 사용합니다.

 

 

GitHub 서버 추가

Jenkins 관리 페이지에서 GitHub 서버를 추가해줍니다.

 

 

시스템 설정 페이지 하단에 있는 GitHub 서버 추가 버튼을 클릭하여 추가를 진행합니다.

 

 

GitHub 서버와 연동 시 Credentials이 필요하며 별도로 추가한 Credentials이 있다면 사용하고 없다면 추가 등록하기위해 Add 버튼을 클릭합니다.

 

 

사전에 발급한 Personal Access Tokens을 Secret text로 설정하고 등록합니다.

 

 

등록 완료 후 Test connection으로 테스트 시 정상적으로 GitHub 서버 추가 작업이 완료되었음을 확인하실 수 있습니다.

 

Personal Access Tokens 발급 후 해당 Token으로 GitHub 서버를 추가하는 작업을 완료하였습니다.
다음에는 GitHub 프로젝트와 연동하는 설정을 진행해보도록 하겠습니다...! 끝...!

 

 

 

[Reference]

[Jenkins] Jenkins Pipeline environment variables 사용 및 전체 리스트 출력하기

Jenkins Pipeline은 전역 변수인 environment variables를 통해 Jenkins에서 제공하는 다양한 환경 변수를 사용할 수 있습니다. 해당 정보를 통해 빌드 또는 테스트를 다르게 구성하도록 설정할 수 있으며 CI 시 필요한 정보에도 사용할 수 있습니다.

 

environment variables 사용 및 전체 리스트를 출력하는 방법을 알아봅시다.

 

 

environment variables 사용하기

environment variables를 사용하기 위해서는 env.을 통해 사용하고자 하는 환경 변수를 뒤에 선언해줍니다.
테스트를 위해 JOB_NAME 항목과 BUILD_ID 항목을 출력하기 위한 pipeline을 작성해봤습니다.

pipeline {
     agent any
     stages {
          stage('test-use-environment-variables') {
               steps {
                    echo "env.JOB_NAME : ${env.JOB_NAME}"
                    echo "env.BUILD_ID : ${env.BUILD_ID}"
               }
          }
     }
}

 

pipeline을 실행하여 결과 값을 확인합니다.
환경 변수 JOB_NAME 항목과 BUILD_ID 항목의 값을 확인하실 수 있습니다.

[Pipeline] Start of Pipeline
[Pipeline] {
[Pipeline] stage
[Pipeline] { (test-use-environment-variables)
[Pipeline] echo
env.JOB_NAME : jenkins-test-pipeline-001
[Pipeline] echo
env.BUILD_ID : 101
[Pipeline] }
  • env.JOB_NAME : jenkins-test-pipeline-001
  • env.BUILD_ID : 101

pipeline에서 사용하고자 하는 구문에 ${env.DATA} 형식으로 환경 변수를 사용할 수 있습니다.

 

 

 

environment variables 전체 리스트 출력하기

environment variables의 전체 리스트를 출력하여 사용할 수 있는 환경 변수를 확인할 수 있습니다.
Git Repository 및 사용하는 Plugins 등에 따라 출력되는 항목은 다를 수 있습니다.

테스트를 위해 전체 리스트를 출력하기 위한 pipeline을 작성해봤습니다.

pipeline {
     agent any
     stages {
          stage('test-use-environment-variables') {
               steps {
                    sh 'printenv'
               }
          }
     }
}

 

pipeline을 실행하여 결과 값을 확인합니다.
해당 pipeline에서 제공하는 environment variables 전체 리스트를 확인하실 수 있습니다.

(Private한 정보는 숨김처리 했습니다)

environment variables 전체 리스트
+ printenv
gitlabSourceRepoURL=ssh://git@################################################/test-project.git
JENKINS_HOME=/var/jenkins_home
GIT_PREVIOUS_SUCCESSFUL_COMMIT=553623fdd4a070d4d20866df329e0da685025cf6
JENKINS_UC_EXPERIMENTAL=https://updates.jenkins.io/experimental
CI=true
RUN_CHANGES_DISPLAY_URL=http://################################################/job/jenkins-test-pipeline-001/104/display/redirect?page=changes
gitlabAfter=dd77bc3d4dbae981b83223144f00d3e8cd2d2df6
HOSTNAME=2dedf5df6d0f
SHLVL=0
NODE_LABELS=built-in cicd-jenkins
HUDSON_URL=http://################################################/
GIT_COMMIT=dd77bc3d4dbae981b83223144f00d3e8cd2d2df6
HOME=/var/jenkins_home
BUILD_URL=http://################################################/job/jenkins-test-pipeline-001/104/
HUDSON_COOKIE=e1ab8579-0e43-4c87-b99d-d3429a902ad1
gitlabTargetBranch=cicd-jenkins
JENKINS_SERVER_COOKIE=durable-ed442d3ad3a22f5c36c67c83bb48f7b34155799687da888ff49fc84e1cced00a
JENKINS_UC=https://updates.jenkins.io
gitlabSourceRepoHttpUrl=https://################################################/test-project.git
gitlabUserUsername=test-user
WORKSPACE=/var/jenkins_home/workspace/jenkins-test-pipeline-001@3
REF=/usr/share/jenkins/ref
gitlabMergeRequestLastCommit=dd77bc3d4dbae981b83223144f00d3e8cd2d2df6
NODE_NAME=built-in
gitlabSourceRepoSshUrl=ssh://git@################################################/test-project.git
RUN_ARTIFACTS_DISPLAY_URL=http://################################################/job/jenkins-test-pipeline-001/104/display/redirect?page=artifacts
STAGE_NAME=test-use-environment-variables
GIT_BRANCH=origin/cicd-jenkins
gitlabSourceRepoHomepage=https://################################################/test-project
EXECUTOR_NUMBER=0
gitlabBranch=cicd-jenkins
RUN_TESTS_DISPLAY_URL=http://################################################/job/jenkins-test-pipeline-001/104/display/redirect?page=tests
BUILD_DISPLAY_NAME=#104
gitlabSourceBranch=cicd-jenkins
JENKINS_VERSION=2.387.1
JENKINS_INCREMENTALS_REPO_MIRROR=https://repo.jenkins-ci.org/incrementals
HUDSON_HOME=/var/jenkins_home
GO_VERSION=1.19
JOB_BASE_NAME=jenkins-test-pipeline-001
PATH=/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
BUILD_ID=104
gitlabBefore=f9b8a1cd2c0a396543d73f4df1d808e3a4f43fa4
BUILD_TAG=jenkins-jenkins-test-pipeline-001-104
gitlabActionType=PUSH
JENKINS_URL=http://################################################/
LANG=C.UTF-8
JOB_URL=http://################################################/job/jenkins-test-pipeline-001/
gitlabSourceRepoName=test-project
GIT_URL=https://################################################/test-project.git
gitlabSourceNamespace=experiment
BUILD_NUMBER=104
JENKINS_NODE_COOKIE=4dac1e72-512f-4f72-8c9b-6e7d94748b11
RUN_DISPLAY_URL=http://################################################/job/jenkins-test-pipeline-001/104/display/redirect
JENKINS_SLAVE_AGENT_PORT=50000
HUDSON_SERVER_COOKIE=a600b39245c6beef
JOB_DISPLAY_URL=http://################################################/job/jenkins-test-pipeline-001/display/redirect
JOB_NAME=jenkins-test-pipeline-001
COPY_REFERENCE_FILE_LOG=/var/jenkins_home/copy_reference_file.log
PWD=/var/jenkins_home/workspace/jenkins-test-pipeline-001@3
JAVA_HOME=/opt/java/openjdk
gitlabUserName=홍길동
GIT_PREVIOUS_COMMIT=3f6dff84fe6d6497a120f7668efc65ef140a21c1
WORKSPACE_TMP=/var/jenkins_home/workspace/jenkins-test-pipeline-001@3@tmp
GITLAB_OBJECT_KIND=none

 

Jenkins Pipeline environment variables 사용 및 전체 리스트 출력하는 작업을 완료하였습니다...! 끝...!

 

 

 

[Reference]

[Jenkins] Jenkins TimeZone 변경하기

Jenkins에서 Project 및 Pipeline 등의 작업을 진행하면 작업 시간이 기록됩니다. 별도의 설정을 하지 않으면 기본 TimeZone으로 시간이 출력되기 때문에 TimeZone을 한국 시간인 Asia/Seoul로 변경하는 방법을 알아봅시다.

 

Jenkins TimeZone 변경하기

TimeZone 설정은 각 계정별로 관리되는 설정이므로 로그인한 계정의 설정 메뉴를 선택합니다.

 

 

User Defined Time Zone 설정에서 변경하고자 하는 TimeZone을 선택합니다.
선택 후 Save 버튼을 클릭하여 저장하면 TimeZone 변경 작업이 완료됩니다.

기존에 작업했던 작업 이력 시간이 변경된 TimeZone 시간으로 변경되어 출력됩니다.

 

 

Jenkins TimeZone 변경하는 작업을 완료하였습니다...! 끝...!

[Jenkins] Jenkins root 계정 패스워드 복구

Jenkins root 계정의 패스워드를 까먹었을 경우 복구하는 방법을 알아봅시다.

 

Jenkins 설정 파일 (config.xml) 파일 수정

Jenkins의 설정 파일인 config.xml 파일을 수정하여 잠시 로그인 없이도 관리 페이지에 접근할 수 있도록 설정이 가능합니다.

vi 에디터 등을 사용하여 Jenkins Home Dir 경로에 생성되어 있는 config.xml 파일의 아래와 같이 useSecurity 항목을 true에서 false로 변경합니다.

vi /{{Jenkins Home Dir}}/config.xml
<useSecurity>true</useSecurity>

 

config.xml 파일 내용(예시)
<?xml version='1.1' encoding='UTF-8'?>
<hudson>
  <disabledAdministrativeMonitors/>
  <version>2.387.1</version>
  <numExecutors>2</numExecutors>
  <mode>NORMAL</mode>
  <useSecurity>false</useSecurity>
  <authorizationStrategy class="hudson.security.FullControlOnceLoggedInAuthorizationStrategy">
    <denyAnonymousReadAccess>true</denyAnonymousReadAccess>
  </authorizationStrategy>
  <securityRealm class="hudson.security.HudsonPrivateSecurityRealm">
    <disableSignup>true</disableSignup>
    <enableCaptcha>false</enableCaptcha>
  </securityRealm>
  <disableRememberMe>false</disableRememberMe>
  <projectNamingStrategy class="jenkins.model.ProjectNamingStrategy$DefaultProjectNamingStrategy"/>
  <workspaceDir>${JENKINS_HOME}/workspace/${ITEM_FULL_NAME}</workspaceDir>
  <buildsDir>${ITEM_ROOTDIR}/builds</buildsDir>
  <jdks/>
  <viewsTabBar class="hudson.views.DefaultViewsTabBar"/>
  <myViewsTabBar class="hudson.views.DefaultMyViewsTabBar"/>
  <clouds/>
  <scmCheckoutRetryCount>0</scmCheckoutRetryCount>
  <views>
    <hudson.model.AllView>
      <owner class="hudson" reference="../../.."/>
      <name>all</name>
      <filterExecutors>false</filterExecutors>
      <filterQueue>false</filterQueue>
      <properties class="hudson.model.View$PropertyList"/>
    </hudson.model.AllView>
  </views>
  <primaryView>all</primaryView>
  <slaveAgentPort>50000</slaveAgentPort>
  <label></label>
  <crumbIssuer class="hudson.security.csrf.DefaultCrumbIssuer">
    <excludeClientIPFromCrumb>false</excludeClientIPFromCrumb>
  </crumbIssuer>
  <nodeProperties/>
  <globalNodeProperties/>
  <nodeRenameMigrationNeeded>false</nodeRenameMigrationNeeded>
</hudson>

 

Jenkins 재시작

Jenkins의 설정 파일인 config.xml파일 수정 후 Jenkins를 재시작해야지만 설정이 적용되므로 Jenkins를 재시작해줍니다.
저는 Docker 환경에서 Jenkins를 실행했으므로 Jenkins 컨테이너를 재시작하겠습니다.

# docker restart server-jenkins
server-jenkins

# docker ps -a | grep server-jenkins
2dbe6e4b3f7b   jenkins/jenkins:lts-jdk11                                         "/usr/bin/tini -- /u…"   2 days ago    Up 12 minutes                   0.0.0.0:50000->50000/tcp, 0.0.0.0:8088->8080/tcp   server-jenkins

 

Jenkins 관리 페이지 접속 및 패스워드 복구

Jenkins 관리 페이지 접속 시 아래와 같이 사용자 이름 및 암호를 입력할 필요 없이 바로 관리자 페이지로 접속됩니다.

 

패스워드 복구를 위해 Jenkins -> Security -> Configure Global Securiy 메뉴를 접속합니다.

 

기존에 None 으로 설정되어 있었던 Security Realm 설정을 Jenkins' own user database 로 변경하고 사용자의 가입 허용을 체크하고 Save 버튼을 눌러 저장합니다.

 

설정 저장이 완료되면 기존에 없었던 Security -> Manage Users 메뉴가 생성되며 해당 메뉴를 접속합니다.

 

패스워드를 복구하고자 하는 계정의 톱니바퀴 버튼을 클릭하여 패스워드 변경 화면에 접속합니다.

 

변경하고자 하는 패스워드를 입력 후 Save 버튼을 눌러 저장합니다.

 

저장 완료 후 다시 로그인 버튼을 클릭하여 패스워드를 복구한 계정으로 접속하여 사용 가능합니다.

 

Jenkins root 계정 패스워드 복구하는 작업을 완료하였습니다...! 끝...!

 

 

 

[Reference]

+ Recent posts