3

전 Jenkins 2 파이프 라인을 처음 사용했습니다.Jenkins 2 파이프 라인 - 연속 공급 파이프 라인 모델링 방법

나는 다음과 같은 전망 젠킨스와 함께 1 개 파이프 라인을 연주했다 : 당신은, 직접 특정 단계를 시작의 내가 테스트를 건너 뛰는, 릴리스 단계에서 실행을 시작하도록 선택할 수 있습니다 가정 해 봅시다 수

enter image description here

. 준비부터 모든 단계를 실행 나는 "지금 빌드"한 파이프 라인 페이지에서

stage('Preparation'){ 
    echo """ 
     Preparing 
     something 
     """ 
} 
stage('Greeting') { 
    parallel 'hello1':{ 
     node{ 
      echo 'hello world 1' 
     } 
    }, 'hello2':{ 
     node{ 
      echo 'hello world 2' 
     } 
    } 
} 

:

내가

은 아주 간단 젠킨스 2 파이프 라인의 정의를 가지고있다.

내 질문은 :

  1. 어떻게 내가 원하는 단계를 실행할 수 있습니다

    ? 예를 들어 준비에서 시작하는 대신 인사하기?
  2. 스테이지 간의 종속성을 어떻게 정의합니까? 다른 스테이지가 완료된 후에 호출되는 스테이지를 말합니다.
  3. 특정 사용자가 시작할 수있는 스테이지를 제한하는 방법이 있습니까? 특정 사용자가 인사말 단계를 시작하기를 원한다고 가정 해보십시오.
  4. 수동 스테이지를 어떻게 설정합니까?

UPDATE : 이것은 내가 원하는 동작입니다

Build stage --> AUTO --> Acceptance Stage --> MANUAL --> Production Stage 
              --> MANUAL --> QA Stage 

: 내 질문 뒤에 진짜 목적이 (가) 연속 전달 파이프 라인의 모델링 젠킨스 2 파이프 라인와 함께 다음과 같은입니다 :

빌드 단계 (사용자가 시작할 수 있음) 완료되면 자동으로 실행됩니다. t 그는 수락 단계입니다. 빌드 스테이지를 성공적으로 완료 한 후에는 자동으로 만 수동으로 시작할 수 없습니다.

수용 단계에서 내가 권한이있는 사용자 만 수동으로 품질 보증 단계생산 단계를 실행할 수 있어야합니다.

비즈니스 흐름은 다음과 같습니다. 개발자가 Build Stage를 클릭하고 해당 코드가 빌드 및 패키지화됩니다. Acceptance Stage가 시작되어 패키지 코드를 사용하여 일련의 자동화 된 테스트를 실행합니다. 접수 단계가 OK 완료되면이 시점에서

는 두 가지 상황이 발생할 수 있습니다 어쩌면 QA 단계는 (오이, 매뉴얼 등) 더 많은 테스트를 실행하는 데 필요한
  1. . 일부 승인 된 사용자는이 단계를 시작합니다.
  2. 제품 소유자가 만족 스러울 때 그는 제작 단계를 시작하여 프로덕션 환경에서 코드를 배포 할 수 있습니다.

나는 이것을 Jenkins 2 파이프 라인 모델로 고심하고있다.

답변

5

일부 질문에 대한 직접적인 대답은 없지만 몇 가지 추가 코딩으로 달성 할 수 있습니다. 어떤 사람들은 달성하기 위해 다른 방법을 찾을 날이 내 마음에 무엇을 함께 해보자 수도 있지만이 부울 매개 변수 FASTFORWARD_TO_GREETING를 추가하고 조작하기 위해 구축 실행하는 동안 제공되는 값을 사용하는 것보다 얻을 수있는

1) How can I run the stage I prefer? For instance Greeting instead of starting from Preparation? 

당신의 빌드의 흐름.

if (FASTFORWARD_TO_GREETING == 'false') { 
stage('Preparation'){ 
    echo """ 
     Preparing 
     something 
     """ 
} 
} 

stage('Greeting') { 
    parallel 'hello1':{ 
     node{ 
      echo 'hello world 1' 
     } 
    }, 'hello2':{ 
     node{ 
      echo 'hello world 2' 
     } 
    } 
} 


2) How do you define the dependencies between stages? I mean the stage called after another one completes 

단계가 순차적으로 실행된다, 그래서 무대가 처음 정의 된 경우 먼저 다음 단계로 이동하기 전에 시작하고 완료 할 수 있습니다 : 그래서 당신의 코드는 지금과 같이 표시됩니다. 그러나 병렬 단계에서는 모든 단계가 병렬로 실행되므로이 ​​단계는 사실이 아닙니다. 따라서 예제 코드에서 정의한 종속성은 "준비"단계가 먼저 실행되고 "hello1"및 "hello2"단계 만 병렬로 실행된다는 것입니다. 그러나 "안녕하세요 세계 1"또는 "안녕하세요 세계 2"가 인쇄된다는 보장은 없습니다.

3) Is there a way to limit the stages that a certain user can start? Imagine that I only want a specific user to launch the Greeting stage. 

무대 바로 전에 수동 승인 단계를 가질 수 있습니다. 예를 들어, 코드에서 당신이 실행될 준비를 무대 원하는 당신이 무대 인사를 실행하기 전에 수동 승인을 가고 싶어보다, 코드는 다음과 같이 표시됩니다

stage('Preparation'){ 
    echo """ 
     Preparing 
     something 
     """ 
} 
stage concurrency: 1, name: 'approve-greeting' 
input id: 'greeting-deploy', message: 'Proceed to Greeting?', ok: 'Deploy' 

stage('Greeting') { 
    parallel 'hello1':{ 
     node{ 
      echo 'hello world 1' 
     } 
    }, 'hello2':{ 
     node{ 
      echo 'hello world 2' 
     } 
    } 
} 

이 때 후 무슨 일이 일어날 지 스테이지 준비가 실행될 빌드를 실행하지만 그 이후에는 수동 승인이 진행될 때까지 기다릴 것입니다. 젠킨스 파이프 라인보기에서 무대는 "인사 - 인사"라고 부르며 누군가가보기에서 클릭하여 빌드를 승인 할 때까지 기다릴 것입니다.

4) How do you setup manual stages? 

나는 이것이 대답 3에서 응답된다고 생각하십니까?

추가 정보/설명이 필요한 경우 알려 주시기 바랍니다.

편집 : 아래의 추가 답변을 검색 할 수 있습니다 : 그것은 자동으로 수용 단계 트리거 완료되면

빌드 단계를 (모든 사용자가 시작할 수 있습니다).

분명히 젠킨스 파이프 라인에서는 빌드 스테이지와 수락 스테이지가 정상 스테이지로 정의됩니다. 그래서 코드는 간단 같은 것 :이 시점에서

node { 
    //define any variable here 
    // Get source code from repo using checkout to directory say stackoverflow 
    // Get source code from repo for acceptance test using checkout to directory say stackoverflow-test 
    //Define any tool like Maven etc. location if required. 
    dir('stackoverflow') { 
     stage name: 'build' 
     //Do required steps 
    } 
    dir('stackoverflow-test') { 
     stage name: 'Acceptance' 
     //Do required steps here 
    } 

, 수용 단계 확인을 완료하면, 두 가지 이 일어날 수 있습니다

  1. 어쩌면 QA 단계가 더 많은 테스트를 실행하는 데 필요한 (오이, 설명서 등). 일부 권한이 부여 된 사용자가이 단계를 수행합니다.

  2. 제품 소유자가 만족할 때 생산 단계를 시작하여 프로덕션 환경에서 코드를 배포 할 수 있습니다.

당신이 위의 코드 조각은 지금 쓸 수 그래서 후에 입력 옵션을함으로써 할 수있는이

: 위의 값을 다시 흐름을 조작 할 수있는보다

stage 'promotion' 
     def userInput = input(
     id: 'userInput', message: 'Let\'s promote?', parameters: [ 
     [$class: 'BooleanParameterDefinition', defaultValue: false, description: 'Production', name: 'prod'], 
     [$class: 'BooleanParameterDefinition', defaultValue: false, description: 'ManualQA', name: 'qa'] 
     ]) 
     echo ("Env: "+userInput['prod']) 
     echo ("Target: "+userInput['qa']) 

. 마찬가지로 :

자극의 값은 품질 보증의 값이 훨씬 FASTFORWARD_TO_GREETING 내 위의 예제 코드 품질 보증 매뉴얼 단계로 진행보다 사실이라면 생산 단계, 로 진행보다 사실이라면.

EDIT 2 주석 섹션에

또한 응답 질문

:

1) 내가 FASTFORWARD_TO_GREETING는 다음과 같이 정의 될 것 같은

매개 변수를 FASTFORWARD_TO_GREETING 같은 매개 변수를 지정하려면 어떻게 어디서 취업 레벨 parameter

2) 프로모션 단계에서 ManualQA와 Production 중에서 선택해야합니다. 사용자가 ManualQA를 선택하면 해당 단계가 실행되어 생산을 건너 뜁니다. 그 후 나는 그가 원하는 경우 사용자가 약속을 원한다 생산 단계로 승진. 의 전체 정의를 제공 할 수 있다면 파이프 라인이 좋을 것입니다.

다른 입력 단계로 MaualQA 단계 이후에 조작 할 수 있지만 이번에는 단 하나의 매개 변수로 처리 할 수 ​​있습니다. 그래서 단계 승진 한 후,이 단계 ManualQA하고보다 후 입력 단계 아래이 있음 : 사용자가 단계 또는 하지를 실행할 수있는 권한이있는 경우

def userInput1 = input(
id: 'userInput', message: 'Let\'s promote?', parameters: [ 
[$class: 'BooleanParameterDefinition', defaultValue: false, description: 'Production', name: 'prod'] 
]) 

3) 어떻게 확인할 수 있습니다. 이상적으로 역할을 기반으로하고 싶습니다.

역할을 수행하는 방법에 대해 확실하지 않지만 관리자 액세스 권한이 있거나 실행중인 모든 사람이 해당 단계를 실행/승인 할 수있는 권한이 있다고 생각하지만 그것이 어떻게 든 고칠 수 있다면 100 % 확실하지 않습니다.

+0

안녕하세요 마니, 이것 좀 도와 주셔서 감사합니다. 달성하고자하는 진정한 목표는 지속적인 공급 파이프 라인 모델링입니다. 정보로 질문을 업데이트했습니다. 이 일을 도와 줄 수 있기를 바랍니다. – codependent

+0

@codependent 답변을 업데이트했습니다. 도움이 필요하면 알려주세요. –

+0

정말 고마워요, 제가 필요로하는 것에 더 가까워지고 있습니다. 단 3 가지 의구심 : 1) FASTFORWARD_TO_GREETING 같은 매개 변수를 어떻게 또는 어디서 지정해야합니까?2) 판촉 단계에서는 ManualQA와 Production 중 하나를 선택해야합니다. 사용자가 ManualQA를 선택하면 Production을 건너 뛰는 Stage가 실행됩니다. 그 후에 나는 그가 생산 단계로 승진하고 싶다면 사용자를 약속하기를 원한다. 당신이 파이프 라인의 완전한 정의를 제공 할 수 있다면 그것은 좋을 것입니다. 마지막으로 3) 사용자가 스테이지를 실행할 수있는 권한이 있는지 여부를 어떻게 확인할 수 있습니까? 이상적으로 나는 역할에 따라 그것을하고 싶다. 다른 질문보기 : – codependent

2

이 내가 받아 anwer에서받은 표시와 내장 전체 연속 배달 파이프 라인이다 :

node{ 
    def user 
    def userInput 
    def mvnHome = tool 'M3' 

    wrap([$class: 'BuildUser']) { 
     user = env.BUILD_USER_ID 
    } 

    stage('Commit Stage'){ 
     echo 'Downloading from Git...' 
     git 'https://github.com/codependent/spring-nio-rest.git' 
     'Building project...' 
     sh "${mvnHome}/bin/mvn clean install -DskipTests" 
    } 

    stage('Acceptance Stage') { 
     echo """ 
      Getting image from Nexus...OK 
      Deploying image...OK 
      Executing tests...OK 
      """ 
     userInput = input(id: 'userInput', message: 'Select the next stage:', parameters: [ 
      [$class: 'BooleanParameterDefinition', defaultValue: false, description: 'Run QA tests', name: 'QA'], 
      [$class: 'BooleanParameterDefinition', defaultValue: false, description: 'Run performance tests', name: 'performance'] 
     ]) 
    } 

    if(userInput['QA']){ 
     stage('QA Stage') { 
     echo """ 
      Getting image from Nexus...OK 
      Deploying image...OK 
      Executing QA tests...OK 
      """ 
     } 
    } 

    if(userInput['performance']){ 
     stage('Performance Stage') { 
     echo """ 
      Getting image from Nexus...OK 
      Deploying image...OK 
      Executing Performance tests...OK 
      """ 
     } 
    } 

    stage('Production Stage') { 
     input message: 'Are you sure you want to deploy to Production?', submitter: 'codependent' 
     echo 'Deploying to Production...OK' 
    } 
} 
관련 문제