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으로 지정하겠습니다 .

확인 버튼을 클릭하면 파이프 라인 구성 페이지로 이동합니다. 이 페이지에는 " 일반" , " 빌드 트리거" , " 고급 프로젝트 옵션" 및 " 파이프 라인"같은 여러 섹션이 있습니다 .

' 빌드 트리거' 섹션 까지 아래로 스크롤 하고 변경 사항이 Bitbucket에 푸시 될 때 빌드 옆의 확인란을 선택 하겠습니다 . 이 옵션은 Bitbucket 플러그인을 설치 한 경우에만 사용할 수 있습니다 .

파이프 라인 섹션 까지 아래로 스크롤하겠습니다 . 정의 옆의 드롭 다운에서 파이프 라인 스크립트 를 선택해야합니다 .

이 드롭 다운 바로 아래의 텍스트 상자는 스크립트가 배치되기를 기다리고 있습니다. 두 가지 방법이 있습니다.

전체 스크립트를 입력하거나 파이프 라인 구문으로 알려진 Jenkins에서 제공하는 유틸리티를 사용할 수 있습니다 .

두 번째 옵션을 선택하겠습니다.

파이프 라인 구문을 클릭 하면 위의 다이어그램에 강조 표시된대로 브라우저에 새 탭이 열립니다. 이것은 우리가 수행하고자하는 작업을 지정할 수있는 편리한 유틸리티이며 도구는 Groovy에서 스크립트를 생성합니다 . 그런 다음 스크립트를 복사하여 파이프 라인 구성에 붙여 넣을 수 있습니다.

샘플 단계 드롭 다운 에서 체크 아웃 : 일반 SCM선택하겠습니다 . SCM Repo URL 및 사용자 자격 증명을 제공 한 후 Generate Pipeline Script 버튼 을 클릭해야 합니다.

그러면 텍스트 상자에 스크립트가 생성됩니다.

이 스크립트를 복사하여 나중에 사용할 수 있도록 어딘가에 저장하겠습니다.

같은 페이지에서 위로 스크롤 하여 Sample Step 드롭 다운 에서 withMaven : Provide Maven 환경선택 합니다. 이 옵션은 Pipeline Maven Integration Plugin이 설치된 경우에만 사용할 수 있다는 점에 유의해야합니다 .

해당 드롭 다운 옆에있는 Maven 및 JDK 설치의 이름을 선택해야합니다. 파이프 라인 스크립트 생성 버튼 을 클릭해야 합니다.

그러면 텍스트 상자에 스크립트가 생성됩니다.

스크립트를 저장합시다.

생성해야 할 스크립트가 몇 개 더 있습니다. 하자의 선택 노드 : 노드를 할당샘플 단계 드롭 다운 ,마스터 에서 레이블 텍스트 필드를 클릭 파이프 라인 스크립트를 생성합니다 :

스크립트를 저장합시다.

그리고 마지막.

단계를 선택하겠습니다 . 샘플 단계 드롭 다운에서 단계를 선택 하고 단계 이름 텍스트 필드에 scm입력 한 다음 파이프 라인 스크립트 생성을 클릭합니다 .

저장합시다.

지금까지 생성 된 모든 스크립트를 모아서 함께 연결해야 할 때입니다.

node('master') {
    stage('scm') {
        checkout([$class: 'GitSCM', 
          branches: [[name: '*/master']], 
          doGenerateSubmoduleConfigurations: false, 
          extensions: [], 
          submoduleCfg: [], 
          userRemoteConfigs: [[credentialsId: 'e50f564f-fbb7-4660-9c95-52dc93fa26f7', 
          url: 'https://developer@bitbucket.org/projects/springpocrepo.git']]])
    }

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

위 스크립트 의 첫 번째 문인 node ( 'master') 는 Jenkins 서버의 기본 노드 master 라는 노드에서 작업이 실행됨을 나타냅니다 .

위의 스크립트를 파이프 라인 섹션 의 텍스트 상자에 복사 해 보겠습니다 .

이 구성을 저장하겠습니다.

이제 빠진 것이 하나뿐입니다. Bitbucket에서 Webhook을 구성해야합니다. Webhook은 Bitbucket에서 특정 이벤트가 발생할 때마다 Jenkins 서버에 푸시 알림을 보내는 역할을합니다 .

구성 방법을 살펴 보겠습니다.

Bitbucket에 로그인하고 리포지토리를 선택하겠습니다. 왼쪽 열에 옵션 설정 이 표시 됩니다. 클릭하면 WORKFLOW 섹션에 Webhooks 옵션이 표시 됩니다 . 새 웹훅을 만들어 보겠습니다.

제목 필드 에이 웹훅에 이름을 제공해야 합니다. 또한 URL 필드에 웹훅에 대한 URL 을 제공해야 합니다. 이 URL은 Jenkins에서 제공하는 하나의 특정 REST API 엔드 포인트를 가리켜 야하며 해당 엔드 포인트는 bitbucket-hook 입니다.

URL은 반드시 후행 슬래시로 끝나야합니다 .

 

위의 Webhook을 구성하는 동안 Repository push 옵션을 선택했습니다 . 즉, Bitbucket은 푸시가 발생할 때마다 Jenkins 서버에 알림을 보냅니다 .

이 동작은 수정할 수 있습니다. 선택할 수있는 여러 가지 옵션이 있습니다.

지금은 기본 옵션 인 Repository Push를 사용 하겠습니다 .

Github에서도 웹훅을 설정할 수 있습니다 . 여기에 '그 구성 방법에 대한 몇 가지 유용한 정보에요.

간단히 말해서, Groovy 언어로 파이프 라인 스크립트를 만들었습니다.이 스크립트 는 제공된 SCM 저장소 의 마스터 브랜치 (제공된 사용자 자격 증명 사용) 에서 저장소에 푸시가있을 때마다 소스 코드를 가져온 다음 mvn clean실행해야합니다. Jenkins 서버에 명령을 설치 합니다 .

이 작업은 특정 시간에 실행되지 않을 것입니다. 대신 SCM 저장소의 마스터 브랜치에 푸시가있을 때까지 기다립니다.

새로운 푸시 이벤트가 발생 하면 Jenkins 작업 대시 보드 "빌드 기록" 섹션에 새로운 실행이 표시 됩니다.

옆에 보류 상태 로 시작되는 새 빌드가 표시되어야 합니다.

몇 초 안에이 빌드가 실행을 시작하고 Console Output 에서 전체 로그를 볼 수 있습니다 .

콘솔 출력의 첫 번째 문은 "Started by Bitbucket push by .." 입니다. 이는 Bitbucket에서 푸시가 발생할 때 빌드가 자동으로 트리거되었음을 의미합니다.

 

모든 것이 잘되면 빌드가 성공적으로 완료됩니다.

6. Jenkinsfile을 사용하는 작업 생성

Jenkins 파이프 라인에 스크립트를 작성하지 않고 Bitbucket Webhook에 의해 트리거되는 빌드 실행을 달성 할 수 있습니다.

이렇게하려면 Bitbucket에서 새 파일을 만들고 Jenkinsfile 로 이름을 지정해야합니다 . 파이프 라인 스크립트를 약간 수정하여이 Jenkinsfile로 전송해야합니다. 그 방법을 정확히 살펴 보겠습니다.

Jenkins에서 새 파이프 라인을 만들고 이름을 PipelineWithJenkinsfile로 지정합니다 .

파이프 라인 구성 페이지 에서 파이프 라인 섹션의 정의 옆에있는 SCM의 파이프 라인 스크립트를 선택 합니다. SCM 옆에 다양한 옵션이있는 드롭 다운이 표시 됩니다. 드롭 다운에서 Git선택하겠습니다 .

그런 다음 Bitbucket 저장소의 URL과 사용자 자격 증명을 제공해야합니다. Script Path 옆의 텍스트 필드 에 기본값 인 Jenkinsfile이 포함되어 있는지 확인합니다 .

 

Jenkins에 관한 한, 이것이 우리가 구성해야 할 전부입니다.

그러나 저장소에 Jenkinsfile을 만들어야합니다. 이제 새 텍스트 파일을 만들고 Jenkinsfile로 이름을 지정한 다음 다음과 같은 간단한 그루비 스크립트를 사용하겠습니다.

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

이 스크립트는 이전 섹션에서 만든 파이프 라인 스크립트와 거의 동일하지만 한 번만 수정하면됩니다. stage ( 'scm') 의 문 에는 URL 및 사용자 자격 증명 정보가 필요하지 않습니다. 대신 필요한 것은 checkout scm 입니다.

그리고 그게 다야. 이 파일을 Bitbucket에 커밋하는 순간 Jenkins 에서 빌드가 트리거되고 Build History 에서 빌드가 트리거되는 것을 볼 수 있습니다.

이 섹션과 이전 섹션의 유일한 차이점 은 Bitbucket 저장소에 파이프 라인 스크립트를 정의 했다는 것입니다.

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

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

7. 결론

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

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