如何将 shell 执行 shell 重写为管道插件
How do I rewrite shell execution shell into pipeline plugin
我有一个由 shell 脚本执行的 Jenkins 作业。此脚本包括 git 拉取、使用 makefile 构建项目和测试 运行s.
最近,我们决定使用管道插件重写脚本,所以所有这些过程都将显示为管道输出。所以不用查看日志,用户也可以知道不同步骤的过程。
旧的 shell 代码看起来像
git checkout
...
make build
...
test
...
我目前所做的更改是
node{
stage 'Checkout'
sh '''
git checkout
...
'''
stage 'Build'
sh '''
make build
...
'''
stage 'Test'
sh '''
test
...
'''
}
它 运行s,但我对我的更改感到很蹩脚。有没有更好的方法来做到这一点?不只是将旧代码复制粘贴到某些 "node, stage, step" 括号中,并使用 "sh ..." 到 运行 it
我认为您的方向是正确的。将您的旧工作分解为不同的阶段 Checkout/Build/Test 似乎是使用 Jenkins 2 管道的方式。
如果您想更进一步,可以参考以下提示:
结帐
管道很棒,但如果可以对其进行版本控制和重用,它们会更好。
您可以选择使用 "Pipeline script from SCM" 选项从 Git 存储库加载管道,而不是在作业描述中使用普通的管道脚本。然后你有两个选择:
- 从您当前的工作项目加载管道,即只需将
your-pipeline.groovy
放在您的代码文件旁边,然后在您工作的 Pipeline script from SCM
部分引用您的 Git 项目,并将 your-pipeline.groovy
放入 Script Path
字段。
- 从外部管道专用 Git 存储库加载管道,然后从该管道加载您的 Git 项目。
这两个选项都允许在 Jenkins 外部将管道作为简单的 groovy 文件进行编辑,更重要的是,它允许对管道进行版本控制。
但是,如果您想更进一步并且需要为多个项目重复使用相同的管道模板(例如:在处理大量微服务时),您可以从任何管道加载另一个管道。
您可以在您的工作项目中轻松拥有一个基本管道,它除了加载一个更通用的管道(对许多作业来说很常见)之外什么都不做。
插件
Sh 很棒,因为它允许您执行 shell 提供的任何操作,但您应该考虑使用专用插件来执行特定操作,例如结帐、Maven 构建或 Junit 测试。
当您开始使用管道时,Pipeline documentation 是一个很好的起点。根据您的示例,您可以从 :
node{
stage 'Checkout'
sh '''
git checkout
...
stage 'Build'
sh '''
make build
...
stage 'Test'
sh '''
test
...
}
至:
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'])
}
插件,除了使阅读更容易一些之外,还允许您利用它们的优势,例如在单元测试失败时能够将构建标记为 Unstable/Failed。
请查看 plugins compatibility 页面以了解有关可以在管道内使用哪些插件的更多信息。
节点
你的 node {}
定义已经足够了,但如果你想更进一步,你可以看看 running some of your code on slaves or running your stages in parallel。
嘘
如果您在 sh 中运行简单的代码,请不要忘记您现在处于 Groovy 环境中并且您可以在 Groovy 中用它做很多事情(例如计算) ] 而不是使用 shell 脚本来完成工作。
管道语法
为了更容易理解您可以使用管道做什么以及您的管道或某个插件的语法应该是什么,您可以在编辑工作。片段生成器和在线文档都将帮助您迈出管道的第一步!
我有一个由 shell 脚本执行的 Jenkins 作业。此脚本包括 git 拉取、使用 makefile 构建项目和测试 运行s.
最近,我们决定使用管道插件重写脚本,所以所有这些过程都将显示为管道输出。所以不用查看日志,用户也可以知道不同步骤的过程。
旧的 shell 代码看起来像
git checkout
...
make build
...
test
...
我目前所做的更改是
node{
stage 'Checkout'
sh '''
git checkout
...
'''
stage 'Build'
sh '''
make build
...
'''
stage 'Test'
sh '''
test
...
'''
}
它 运行s,但我对我的更改感到很蹩脚。有没有更好的方法来做到这一点?不只是将旧代码复制粘贴到某些 "node, stage, step" 括号中,并使用 "sh ..." 到 运行 it
我认为您的方向是正确的。将您的旧工作分解为不同的阶段 Checkout/Build/Test 似乎是使用 Jenkins 2 管道的方式。
如果您想更进一步,可以参考以下提示:
结帐
管道很棒,但如果可以对其进行版本控制和重用,它们会更好。 您可以选择使用 "Pipeline script from SCM" 选项从 Git 存储库加载管道,而不是在作业描述中使用普通的管道脚本。然后你有两个选择:
- 从您当前的工作项目加载管道,即只需将
your-pipeline.groovy
放在您的代码文件旁边,然后在您工作的Pipeline script from SCM
部分引用您的 Git 项目,并将your-pipeline.groovy
放入Script Path
字段。 - 从外部管道专用 Git 存储库加载管道,然后从该管道加载您的 Git 项目。
这两个选项都允许在 Jenkins 外部将管道作为简单的 groovy 文件进行编辑,更重要的是,它允许对管道进行版本控制。
但是,如果您想更进一步并且需要为多个项目重复使用相同的管道模板(例如:在处理大量微服务时),您可以从任何管道加载另一个管道。 您可以在您的工作项目中轻松拥有一个基本管道,它除了加载一个更通用的管道(对许多作业来说很常见)之外什么都不做。
插件
Sh 很棒,因为它允许您执行 shell 提供的任何操作,但您应该考虑使用专用插件来执行特定操作,例如结帐、Maven 构建或 Junit 测试。
当您开始使用管道时,Pipeline documentation 是一个很好的起点。根据您的示例,您可以从 :
node{
stage 'Checkout'
sh '''
git checkout
...
stage 'Build'
sh '''
make build
...
stage 'Test'
sh '''
test
...
}
至:
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'])
}
插件,除了使阅读更容易一些之外,还允许您利用它们的优势,例如在单元测试失败时能够将构建标记为 Unstable/Failed。
请查看 plugins compatibility 页面以了解有关可以在管道内使用哪些插件的更多信息。
节点
你的 node {}
定义已经足够了,但如果你想更进一步,你可以看看 running some of your code on slaves or running your stages in parallel。
嘘
如果您在 sh 中运行简单的代码,请不要忘记您现在处于 Groovy 环境中并且您可以在 Groovy 中用它做很多事情(例如计算) ] 而不是使用 shell 脚本来完成工作。
管道语法
为了更容易理解您可以使用管道做什么以及您的管道或某个插件的语法应该是什么,您可以在编辑工作。片段生成器和在线文档都将帮助您迈出管道的第一步!