2016-11-24 14 views
5

Tôi đang chuyển đổi công việc Jenkins từ cấu hình thủ công sang DSL có nghĩa là tôi đang cố gắng tạo tập lệnh DSL tạo công việc như ngày hôm nay .Thêm tham số "Xây dựng bộ chọn cho tạo bản sao" bằng cách sử dụng Jenkins DSL

Công việc hiện được tham số hóa và một trong các tham số thuộc loại "Bộ chọn bản dựng cho bản sao tạo tác". Tôi có thể thấy trong XML công việc rằng đó là plugin copyartifact và cụ thể là tôi cần sử dụng BuildSelectorParameter.

Tuy nhiên, API DSL Jenkins không có hướng dẫn về cách sử dụng plugin này để đặt tham số - nó chỉ có trợ giúp để sử dụng nó để tạo bước xây dựng, đó không phải là những gì tôi cần.

Tôi cũng không thể tìm thấy bất kỳ điều gì liên quan đến điều này trong các tùy chọn tham số trong API.

Tôi muốn đưa nội dung nào đó vào tập lệnh hạt giống DSL sẽ tạo tham số trong công việc đã tạo khớp với thông số trong hình ảnh.

parameter

Nếu tôi cần phải sử dụng các khối cấu hình sau đó bất cứ lời khuyên trên sẽ được chào đón đến bởi vì đối với người mới bắt đầu, các tài liệu về vấn đề này là khá vô dụng.

Trả lời

3

Tôi không tìm thấy cách nào khác để thiết lập thông số bộ chọn xây dựng nhưng sử dụng khối cấu hình. Đây là những gì tôi đã sử dụng để thiết lập:

freeStyleJob { 
    ... 
    configure { project -> 
     def paramDefs = project/'properties'/'hudson.model.ParametersDefinitionProperty'/'parameterDefinitions' 
     paramDefs << 'hudson.plugins.copyartifact.BuildSelectorParameter'(plugin: "[email protected]") { 
      name('BUILD_SELECTOR') 
      description('The build number to deploy') 
      defaultSelector(class: 'hudson.plugins.copyartifact.SpecificBuildSelector') { 
       buildNumber() 
      } 
     } 
    } 
} 

Để đạt được điều đó, tôi đã tạo công việc theo cách thủ công với thông số bộ chọn xây dựng. Và sau đó tìm kiếm những cấu hình XML của công việc dưới Jenkins để xem xét các phần có liên quan, trong trường hợp của tôi:

<project> 
    ... 
    <properties> 
     <hudson.model.ParametersDefinitionProperty> 
      <parameterDefinitions> 
       ... 
       <hudson.plugins.copyartifact.BuildSelectorParameter plugin="[email protected]" 
        <name>BUILD_SELECTOR</name> 
        <description></description> 
        <defaultSelector class="hudson.plugins.copyartifact.SpecificBuildSelector"> 
         <buildNumber></buildNumber> 
        </defaultSelector> 
       </hudson.plugins.copyartifact.BuildSelectorParameter> 
      </parameterDefinitions> 
     </hudson.model.ParametersDefinitionProperty> 
    </properties> 
    ... 
</project> 

Để tái tạo mà sử dụng mệnh đề configure bạn cần phải hiểu những điều sau đây:

  • Các đối số đầu tiên cho mệnh đề cấu hình là nút job.
  • Sử dụng toán tử / sẽ trả về một nút con của nút có nút đã cho, nếu nút đó không tồn tại được tạo.
  • Sử dụng toán tử << sẽ thêm vào toán hạng bên trái nút được cho dưới dạng toán hạng bên phải.
  • Khi tạo nút, bạn có thể cho nó thuộc tính trong hàm tạo như: myNodeName(attrributeName: 'attributeValue')
  • Bạn có thể chuyển lambda sang nút mới và sử dụng nó để điền cấu trúc bên trong của nó.
+0

Kể từ khi hỏi câu hỏi này tôi đã từ từ làm việc ra cách khối cấu hình hoạt động, nhưng câu trả lời này mang lại cho tôi một ý tưởng tốt hơn về cách nó đến với nhau - vì vậy cảm ơn rất nhiều cho việc này. – shaneoh

0

Tôi có Jenkins phiên bản 1.6 (với plugin copy artifact) và bạn có thể làm điều đó trong DSL như thế này:

job('my-job'){ 
    steps{ 
     copyArtifacts('job-id') { 
      includePatterns('artifact-name') 
      buildSelector { latestSuccessful(true) } 
     } 
    } 
} 

đầy đủ ví dụ:

job('03-create-hive-table'){ 
    steps{ 
     copyArtifacts('seed-job-stash') { 
      includePatterns('jenkins-jobs/scripts/landing/hive/landing-table.sql') 
      buildSelector { latestSuccessful(true) } 
     } 
     copyArtifacts('02-prepare-landing-dir') { 
      includePatterns('jenkins-jobs/scripts/landing/shell/02-prepare-landing-dir.properties') 
      buildSelector { latestSuccessful(true) } 
     } 
     shell(readFileFromWorkspace('jenkins-jobs/scripts/landing/03-ps-create-hive-table.sh')) 
    } 
    wrappers { 
     environmentVariables { 
      env('QUEUE', 'default') 
      env('DB_NAME', 'table_name') 
      env('VERSION', '20161215') 
     } 
     credentialsBinding { file('KEYTAB', 'mycred') } 
    } 
    publishers{ archiveArtifacts('03-create-landing-hive-table.properties') } 
} 
+0

Đây có phải là thông số này làm thông số không? Hoặc để sao chép tạo tác như một bước trong bản dựng? – shaneoh

+0

Tôi có nó như là một bước xây dựng, ví dụ như toàn bộ công việc của tôi def trông như thế này (chỉnh sửa trong câu trả lời) – Babu

+0

OK - nhìn vào ví dụ của bạn mặc dù, tôi không thể thấy cách này là tạo ra một tham số cho xây dựng. Dường như việc tạo một bước tạo bản sao tạo tác phẩm thay thế. – shaneoh

Các vấn đề liên quan