2017-09-21 2 views
1

Windows 및 Linux에서 빌드, 테스트 및 배포해야하는 앱이 있습니다.Jenkin의 파이프 라인에서 여러 노드를 반복적으로 사용

20 개의 Linux가 있고 20 개의 Windows는 각각 'Lin'및 'Win'레이블로 정의 된 Windows입니다.

두 노드 (Linux 및 Windows)를 할당하는 것으로 시작합니다. 문제는 여러 단계를 거쳐 사용해야한다는 것입니다. 그러나, 나는 이것을하기에 좋은 방법을 찾지 못했습니다. 지금까지 나를 위해 내가 꽤 '솔루션'을 시도했지만 한

pipeline { 
agent none 

stages { 
    stage('Build') { 
     parallel (
      "Linux Build": { 
       node('Lin') { // Say this allocates 'Jenkins-node-lin1' 
        ... 
      }, 
      "Windows Build": { 
       node('Win') { // And this allocates 'Jenkins-node-win1' 
        ... 
       } 
      } 
     ) 
    } 
    stage('Test') { 
     steps { 
      parallel (
       "Linux Test": { 
        node('Lin') { // I need to reuse Jenkins-node-lin1 here 
         ... 
       }, 
       "Windows Test": { 
        node('Win') { // And Jenkins-node-win1 here as well 
         ... 
        } 
       } 
      ) 
     } 
    } 
    stage('Deploy') { 
     steps { 
      parallel (
       "Linux Deploy": { 
        node('Lin') { // Same story down here 
         ... 
       }, 
       "Windows Deploy": { 
        node('Win') { // And this one too 
         ... 
       } 
      ) 
     } 
    } 
} // End stages 
} 

아무도 밖으로 일하지하고 정직하게, 나는 ':이 코드는 그것이 내가 할 필요가 무엇인지 설명 도움이

이 기능이 Jenkins에 통합되어 있는지 확실하지 않습니다.

관계없이 모든 도움을 주시면 감사하겠습니다.

답변

0

나는이 시도하지 않은,하지만 난 당신이 (그건 그렇고, 당신은 당신의 단계 {} 블록 누락) 같은 것을 할 수 있다고 생각 : 나는 친 화성을 필요로하는 이유 확실하지 않다

def linux_node 
def windows_node 

pipeline { 
agent none 

stages { 
    stage('Build') { 
     parallel (
      "Linux Build": { 
       node('Lin') { // Say this allocates 'Jenkins-node-lin1' 
        linux_node = env.NODE_NAME 
      }, 
      "Windows Build": { 
       node('Win') { // And this allocates 'Jenkins-node-win1' 
        windows_node = env.NODE_NAME 
       } 
      } 
     ) 
    } 
    stage('Test') { 
     steps { 
      parallel (
       "Linux Test": { 
        node(linux_node) { // I need to reuse Jenkins-node-lin1 here 
         ... 
       }, 
       "Windows Test": { 
        node(windows_node) { // And Jenkins-node-win1 here as well 
         ... 
        } 
       } 
      ) 
     } 
    } 
    stage('Deploy') { 
     steps { 
      parallel (
       "Linux Deploy": { 
        node(linux_node) { // Same story down here 
         ... 
       }, 
       "Windows Deploy": { 
        node(windows_node) { // And this one too 
         ... 
       } 
      ) 
     } 
    } 
} // End stages 
} 

을 특정 노드로 이동하지만 작업 공간에서 특정 파일을 사용할 수 있도록하려면 이렇게하면 약간 위험 할 수 있습니다. 동일한 작업 공간이 사용될 것이라는 보장은 없습니다. 일반적으로 그렇지만 작업 공간이 변경 될 수있는 경우가 있습니다.

다른 옵션은 은닉에 당신의 당신이 단계 사이에 유지해야 할 파일과 다음 단계에서 unstash 그들이다. 그렇다면 그들이 어떤 요원이되는지는 중요하지 않습니다. (노드 유사성에 대한 다른 이유가없는 한)

+0

이 문제를 해결할 수 있었습니까? 너에게 효과가 있었 니? –

+0

나는 그 이후로 이와 비슷한 것을 테스트 해 보았지만 잘 작동한다. 이게 효과 있니? –

관련 문제