如何将shell执行shell重写为管道插件

时间:2016-07-29 00:50:20

标签: shell jenkins jenkins-pipeline

我有一个由shell脚本执行的Jenkins作业。该脚本包括git pull,使用makefile构建项目和测试运行。

最近,我们决定使用管道插件来重写脚本,因此所有这些过程都将显示为管道输出。因此,无需检查日志,用户就可以知道不同步骤的过程。

旧的shell代码看起来像

git checkout 
...
make build
...
test 
...

我目前做了更改

node{
    stage 'Checkout'
    sh '''
       git checkout
       ...
    '''

    stage 'Build'
    sh '''
       make build
       ...
    '''

    stage 'Test'
    sh '''
       test
       ...
    '''
}

它运行,但我对我的变化感到非常沮丧。有没有更好的方法来做到这一点?不只是将旧代码粘贴到某个“节点,阶段,步骤”括号中,并使用“sh ...”来运行它

1 个答案:

答案 0 :(得分:1)

我认为你走在正确的轨道上。将旧工作分解为单独的阶段Checkout / Build / Test似乎是使用Jenkins 2管道的方法。

如果您想进一步了解,可以参考以下几个提示:

结帐

管道很棒,但是当它们可以进行版本化和重复使用时它们会更好。 您可以选择使用“来自SCM的管道脚本”选项从Git存储库加载管道,而不是在作业描述中使用普通管道脚本。然后你有两个选择:

  • 从当前工作项目加载管道,即只需将your-pipeline.groovy放在代码文件旁边,然后在作业的Pipeline script from SCM部分引用您的Git项目,并放置{{1}在your-pipeline.groovy字段中。
  • 从外部的管道专用Git存储库加载管道,然后从此管道加载Git项目。

这两个选项都允许将管道编辑为Jenkins外部的简单groovy文件,更重要的是它允许对管道进行版本控制。

但是,如果您想要更进一步并且需要为多个项目重用相同的管道模板(例如:在处理大量微服务时),您可以从任何管道加载另一个管道。 您可以在工作项目中轻松拥有一个基本管道,除了加载更通用的管道(许多作业通用)之外什么都不做。

插件

Sh非常棒,因为它允许您执行shell提供的任何操作,但您应该考虑使用专用插件来执行特定的操作,例如checkout,Maven构建或Junit测试。

当你开始使用管道时,

Pipeline documentation是一个很好的起点。从您的示例中,您可以来自:

Script Path

到:

node{
    stage 'Checkout'
    sh '''
       git checkout
       ...

    stage 'Build'
    sh '''
       make build
       ...

    stage 'Test'
    sh '''
       test
       ...
}

插件除了使读取更容易之外,还允许您利用它们的优势,例如在单元测试失败时能够将构建标记为不稳定/失败。

请查看plugins compatibility页面,了解有关在管道内使用哪些插件的更多信息。

节点

您的node { stage 'Checkout' git url: 'https://your-git-repo.git' stage 'Build' sh ''' make build stage 'Test' step([$class: 'ArtifactArchiver', artifacts: '**/target/*.jar', fingerprint: true]) step([$class: 'JUnitResultArchiver', testResults: '**/target/surefire-reports/TEST-*.xml']) } 定义已足够,但如果您想进一步了解,可以查看running some of your code on slavesrunning your stages in parallel

如果您在sh中运行了简单的代码,请不要忘记您现在处于Groovy环境中,并且您可以在Groovy中使用它(例如计算)做很多事情而不是使用shell脚本完成工作。

管道语法

为了更容易理解您可以使用管道执行的操作以及管道或某个插件的语法,您可以在编辑作业时使用底部的node {}链接。代码段生成器和在线文档都可以帮助您完成管道的第一步!