【问题标题】:Jenkins Pipeline Best Practice: All in groovy or call powershell scriptJenkins Pipeline 最佳实践:全部在 groovy 或调用 powershell 脚本中
【发布时间】:2019-06-17 06:47:27
【问题描述】:

我们有一个詹金斯构建工作。它有多个步骤,包括 powershell、bat、plungins ... 调用。该程序是一个 Windows 应用程序。 我想将作业更改为 scm 中的管道文件。

我问我最佳做法是什么: 将所有构建步骤转换为 groovy 管道脚本或为每个步骤调用一个 powershell 脚本(也在 scm 中)。 我还想用 groovy 或 powershell 替换 bat 脚本。

【问题讨论】:

  • 恐怕这不是很好的问题。它涉及建议和实践。我不会标记它,因为您仍然可以尝试增强它。请参阅:stackoverflow.com/help/on-topic 表示“yae”,stackoverflow.com/help/dont-ask 表示“nay”。
  • 此外,我还是要分享我的个人观点:我建议您从仅从 Jenkinsfile 调用现有脚本开始。一旦你有了它,试着转移到 Jenkinsfile 本身。会有一种回归,所以什么都不会被破坏,即使你需要停下来重新集中精力,你仍然有工作的 CI 堆栈。

标签: powershell groovy jenkins-pipeline


【解决方案1】:

我的意见是,只要你工作的语言为你提供相同的功能,你就应该尽量减少对外部资源的使用。

所以:对于 Jenkins 管道 groovy 应该是选择。我会在那里进行构建“编排”、沙盒准备、测试机器和容器启动、为 SONAR、Nexus、TFS、Octopus、Artifactory 等外部工具调用 API。

如果您的构建需要额外的构建步骤,例如在 Windows 机器上安装东西、注册 DLL、IIS 操作,那么我会选择 powershell。

【讨论】:

    【解决方案2】:

    只是扩展iftimie-tudor 答案。在我们的案例中,我想尽量减少对外部工具(如 Jenkins 或 Bamboo)的调用,因此我们将构建脚本包装成一个构建脚本和一个通用脚本。我不会权衡您是否应该使用 groovy 或 powershell,因为这取决于团队和您。如果需要,您可以将其拆分为多个脚本,并同时使用 groovy 和 powershell。这是它在 powershell 中的样子:

    MyBuildScript.ps1

    [Parameter(Mandatory=$false,Position=1)]
    [string] $CommonTools = '.\tools\jenkins\Common.ps1',
    [Parameter(Mandatory=$false, Position=2)]
    [switch] $WhatIf
    # LOAD MY COMMON FUNCTIONS 
    . $CommonTools
    # BUILD 
    ## i.e MSBuild
    # TEST 
    ## i.e NUnit
    # PACK 
    ## i.e. OctoPack
    # PUSH 
    
    if($WhatIf) {
    
    } else {
    ## i.e push to Octopus
    }
    

    使构建脚本可在本地测试可能很有用。

    MyBuildScript.Tests.ps1

    Import-Module .\lib\pester.x.x.x\tools\Pester.psm1 -Force
    
    Describe "Test the Build Script" {
       It "Builds everything" { 
       }
    }
    

    使通用工具可在本地测试也很有用。

    Common.Tests.ps1

    Import-Module .\lib\pester.x.x.x\tools\Pester.psm1 -Force
    
    Describe "Test the Build Function" {
       It "Works" { 
       }
    }
    

    理想情况下,脚本是源代码控制的,因此您可以在将构建的每个部分转换为 cmets 中提到的filip-malczak 时跟踪更改。如果有人破坏了构建,他们会修复构建。他们添加了一个功能并且它没有构建,修复构建脚本。反馈循环尽可能快地与test pyramid 对齐。如果需要测试,请添加它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-15
      • 2022-09-29
      • 2016-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多