Jenkins에서 작업 예약

1. 소개

이 기사에서는 Jenkins에서 작업을 예약하는 다양한 방법을 다룰 것입니다.

일반 텍스트 메시지를 인쇄하는 것처럼 간단한 작업을 수행하는 간단한 작업 예약부터 시작하겠습니다. 그리고 GitHub, Bitbucket 등과 같은 SCM 리포지토리의 변경에 따라 자동으로 트리거되는 작업을 예약하도록 예제를 발전시킬 것입니다.

2. 초기 설정

JDK 및 Maven이 Jenkins 서버에서 각각 JDK9.0.1 및 Maven3.5.2라는 이름으로 전역 도구 구성 에 설치 되었다고 가정 합니다.

또한 Maven 프로젝트가 올바르게 설정된 Bitbucket과 같은 SCM 저장소에 대한 액세스 권한이 있다고 가정 합니다.

3. 간단한 작업 예약

작업 구성 페이지에서 빌드 트리거 섹션 까지 바로 아래로 스크롤 해 보겠습니다 . 간단한 작업을 만들려고하므로 주기적으로 빌드 라고 표시된 확인란을 선택하겠습니다 . 이 확인란을 선택하자마자 일정 레이블 이있는 텍스트 상자가 표시됩니다 .

우리는 Cron 호환 형식으로 가치를 제공해야합니다 . 상자 옆에있는 물음표를 클릭하면 페이지에서 사용할 수있는 광범위한 정보가 있습니다.

2 분 간격을 나타내는 * / 2 * * * *를 입력 해 보겠습니다 .

텍스트 상자를 탭하면 상자 바로 아래에 정보가 표시됩니다. 다음에 작업이 언제 실행되는지 알려줍니다.

작업을 저장하겠습니다. 약 2 분 안에 작업의 첫 실행 상태를 확인할 수 있습니다.

작업이 2 분마다 실행되도록 구성 했으므로 잠시 기다린 후 작업 대시 보드로 돌아갈 때 여러 빌드 번호가 표시되어야합니다.

4. SCM을 폴링하는 작업 생성

한 단계 더 나아가 Bitbucket과 같은 SCM 저장소에서 소스 코드를 가져와 빌드를 수행하는 작업을 만들어 보겠습니다.

이전 섹션에서 설명한대로 몇 가지 수정을 통해 새 작업을 생성 해 보겠습니다.

에서 빌드 트리거 섹션 대신 선택하는 빌드 정기적를 ,의 선택하자 설문 조사 SCM을 . 그렇게하면 Label Schedule 텍스트 상자가 표시 됩니다.

하자의 유형 * / 5 * * * * 우리가 5 분마다 실행되도록 작업을 예약 할 뜻이 상자에서 :

소스 코드 관리 섹션으로 스크롤 해 보겠습니다 . Git 옆에있는 라디오 버튼을 선택하면 Repositories 라는 레이블이 붙은 새 섹션이 나타납니다 .

여기에서 SCM 저장소의 세부 정보를 구성해야합니다 . 리포지토리 URL 텍스트 필드 에 SCM 리포지토리의 URL을 입력 해 보겠습니다 .

또한 Jenkins가 저장소에 액세스 할 수 있도록 사용자 자격 증명을 제공해야합니다.

Credentials 옆에 있는 Add 버튼을 클릭 하면 사용자 자격 증명을 생성하는 팝업 화면이 표시됩니다.

Kind as Username with Password를 선택하겠습니다 . 지정된 텍스트 필드에 사용자 이름과 암호를 입력해야합니다.

추가 버튼을 클릭 하면 소스 코드 관리 섹션으로 돌아갑니다 .

Credentials 옆의 드롭 다운에서이 사용자 자격 증명을 선택하겠습니다 .

이제 마지막으로해야 할 일은 빌드 스크립트를 설정하는 것입니다.

빌드 섹션 까지 아래로 스크롤하고 빌드 단계 추가를 클릭 한 다음 Execute Shell을 선택 합니다 . SCM 저장소에서 Maven 프로젝트를 작업하고 있으므로 Maven 빌드를 수행하는 mvn clean install 을 입력해야합니다 .

여기서 우리가 한 일을 이해하려고 노력합시다.

5 분마다 실행되도록 예약 된 작업을 만들었습니다. 작업은 지정된 Bitbucket 저장소의 마스터 브랜치에서 소스 코드를 가져 오도록 구성되었습니다 .

제공된 사용자 자격 증명을 사용하여 Bitbucket에 로그인합니다.

소스 코드를 가져온 후 작업은 제공된 Maven 명령이 포함 된 스크립트를 실행합니다.

이제 저장하고 약 5 분 정도 기다리면 작업 대시 보드의 빌드 기록 섹션 에서 빌드 실행을 볼 수 있습니다.

콘솔 출력은 메이븐 빌드의 출력을 표시해야합니다. 콘솔 출력에서 ​​Bitbucket에서 소스 코드를 가져 왔고 mvn clean install 명령 이 실행되었음을 알 수 있습니다.

Maven 빌드이므로 다운로드되는 Maven 종속성 수에 따라 콘솔 출력이 매우 길 수 있습니다 .

그러나 출력 끝에 BUILD SUCCESS 메시지가 표시됩니다.

5. 파이프 라인을 스크립트로 사용하는 작업 생성

지금까지 미리 정의 된 예약 시간에 실행되는 작업을 만드는 방법을 살펴 보았습니다.

이제 특정 일정에 얽매이지 않는 작업을 만들어 보겠습니다. 대신 SCM 저장소에 새 커밋이있을 때마다 자동으로 트리거하도록 구성합니다.

Jenkins 대시 보드로 돌아가서 New Item을 클릭 합니다 . 이번에는 Freestyle project 대신 Pipeline을 선택 합니다. 이 작업의 이름을 PipelineAsScriptJob으로 지정하겠습니다 .

Upon clicking OK button, we'll be taken to the pipeline configuration page. This page has several sections such as “General”, “Build Triggers”, “Advanced Project Options”, and “Pipeline”.

Let's scroll down to “Build Triggers” section and the select checkbox next to Build when a change is pushed to Bitbucket. This option will be available only if we've installed the Bitbucket Plugin:

Let's scroll down to Pipeline section. We need to select Pipeline Script in the drop-down next to Definition.

The Text Box just below this drop-down is waiting for the script to be placed in. There're two ways of doing this.

We can either type the whole script, or we can make use of a utility provided by Jenkins, which is known as Pipeline Syntax.

Let's choose the second option:

On click of Pipeline Syntax, as highlighted in the diagram above, a new tab opens up in the browser. This is a handy utility where we can specify the operation that we wish to perform, and the tool will generate the script in Groovy for us. We can then copy the script and paste it into the pipeline configuration.

Let's select checkout: General SCM in the Sample Step drop-down. After providing the SCM Repo URL and user credentials, we need to click the Generate Pipeline Script button.

This generates the script in the text box:

Let's copy this script and save it somewhere for later use.

On the same page, let's scroll up and select withMaven: Provide Maven environment in the Sample Step drop-down. It must be noted here, that this option will be available only if Pipeline Maven Integration Plugin is installed.

We need to select the names of Maven and JDK installations next to the corresponding drop-downs. We need to click the Generate Pipeline Script button.

This generates the script in the text box:

Let's save the script.

There are still a few more scripts that we need to generate. Let's select node: Allocate node in the Sample Step drop-down, type master in the Label text field and click Generate Pipeline Script:

Let's save the script.

And last one.

Let's select stage: Stage in the Sample Step drop-down, type scm in the Stage Name text field and click Generate Pipeline Script:

Let's save it.

It's time to collate all the scripts generated so far and stitch them together:

node('master') { stage('scm') { checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'e50f564f-fbb7-4660-9c95-52dc93fa26f7', url: '//[email protected]/projects/springpocrepo.git']]]) } stage('build') { withMaven(jdk: 'JDK9.0.1', maven: 'Maven3.5.2') { sh 'mvn clean install' } } }

The first statement, node(‘master') in the script above, indicates that the job will be executed on a node named master, which is the default node on the Jenkins server.

Let's copy the above script to the Text Box in Pipeline section:

Let's save this configuration.

Now, there's only one thing that's left out. We need to configure a Webhook in Bitbucket. The Webhook is responsible for sending out a push notification to Jenkins server, whenever a particular event takes place in Bitbucket.

Let's take a look at how to configure it.

Let's log in to Bitbucket and select a repository. We should see an option Settings on the left-hand side column. Let's click it, and we should see an option Webhooks in WORKFLOW section. Let's create a new Webhook.

We need to provide some name to this webhook in the Title field. We also need to provide a URL for the webhook in the URL field. This URL needs to point to one particular REST API Endpoint provided by Jenkins, and that endpoint is bitbucket-hook.

It must be noted that the URL MUST end with a trailing slash:

While configuring the Webhook above, we've selected option Repository push. This means Bitbucket will send a notification to Jenkins server whenever a push happens.

This behavior can be modified; there are several different options to choose from.

For now, let's go with the default option,i.e., Repository Push.

We can setup webhook in Github, too; here‘s some helpful information on how to configure that.

Long story short: we've created a pipeline script in Groovy language – that should pull the source code from the master branch of the provided SCM repository (using the provided user credentials), whenever there's a push in the repository and then execute mvn clean install command on the Jenkins server.

It must be noted that this job's not going to run at any particular time. Instead, it's going to wait till there's a push in the master branch of the SCM repository.

As soon as there's a new push event, we'll see a new execution in the “Build History” section on the Jenkins job dashboard.

We should see a new build being initiated with a pending status next to it.

In a few seconds, this build should start execution, and we'll be able to see the complete log in Console Output.

The first statement in the console output says “Started by Bitbucket push by..” – this means that the build was triggered automatically when a Push took place in Bitbucket:

If all goes well, the build should complete successfully.

6. Create a Job That Uses Jenkinsfile

It's possible NOT to write any script in the Jenkins pipeline and still achieve build execution being triggered by the Bitbucket Webhook.

To do so, we have to create a new file in Bitbucket and name it as Jenkinsfile. The pipeline script needs to be transferred to this Jenkinsfile with a slight modification. Let's see exacttly how to do that.

We'll create a new pipeline in Jenkins and name it PipelineWithJenkinsfile.

On the pipeline configuration page, we'll select Pipeline script from SCM next to Definition in the Pipeline section. We'll see a drop-down with different options next to SCM. Let's choose Git from the drop-down.

We then have to provide the URL of Bitbucket repository and user credentials. Let's ensure that the text field next to Script Path contains the default value,i.e., Jenkinsfile:

As far as Jenkins is concerned, that's all we need to configure.

However, we have to create the Jenkinsfile in the repository; so, let's create a new text file, name it as Jenkinsfile and use this simple groovy script:

node('master') { stage('scm') { checkout scm } stage('build') { withMaven(jdk: 'JDK9.0.1', maven: 'Maven3.5.2') { sh 'mvn clean install' } } }

This script is almost the same as the pipeline script that we created in the earlier section, with just one modification. The statement in stage(‘scm') doesn't need the URL and user credentials information. Instead, all it needs is checkout scm.

And that's it. The moment we commit this file into Bitbucket, it'll trigger the build in Jenkins – and we should see the build being triggered in the Build History.

The only difference between this section and the earlier one is that we defined the pipeline script in the Bitbucket repository.

따라서 빌드 스크립트는 빌드해야하는 프로젝트의 소스 코드의 일부입니다 . Jenkins 자체에서 스크립트를 유지하지 않습니다.

대신 Jenkins는 SCM 리포지토리 세부 정보 및 스크립트 파일에 대해 알고 있습니다. 이 저장소에 푸시가있을 때마다 Jenkinsfile 의 스크립트 가 Jenkins 서버에서 실행됩니다 .

7. 결론

이 자습서에서는 다양한 전략을 사용하여 Jenkins에서 작업을 구성하고 예약하는 방법을 살펴 보았습니다.

또한 Bitbucket과 같은 SCM 저장소에서 수행 된 특정 작업을 기반으로 자동 트리거되도록 Jenkins에서 작업을 구성하는 방법도 살펴 보았습니다.