Jenkins基础:Jenkinsfile注意事项:条件跳转与当前路径
发布日期:2021-06-30 20:13:27 浏览次数:2 分类:技术文章

本文共 1681 字,大约阅读时间需要 5 分钟。

在Jenkins 2之后Jenkinsfile作为重要的特性之一得到了广泛地推广,Jenkinsfile的书写也有很多注意事项,这篇文章以习惯使用sh ‘’模块的开发者的角度,以一个NodeJS构建的Jenkinsfile来memo一下条件跳转和当前路径这两个容易被忽视的问题。

示例Jenkinsfile

这是一个使用了NodeJS插件的Angular应用构建的Jenkinsfile示例,里面的if和cd所在的两个stage就是这篇文章所memo的内容。

node {
stage('Prepare Node and NPM') {
// confirm nodejs plugin and setting env.NODEJS_HOME = "${tool 'nodejs-10.15.3'}" env.PATH="${env.NODEJS_HOME}/bin:${env.PATH}" sh 'npm --version' } stage('Prepare Angular CLI') {
// install global angular cli sh 'npm -g install @angular/cli' sh 'ng --version' } stage('Prepare Angular Project') {
// prepare angular demo app sh 'if [ ! -d demo ]; then ng new demo --style less; fi' } stage('Build Angular Project') {
// build angular demo app sh 'cd demo && npm install && npm run build' }}

条件跳转

Jenkinsfile中提供了各种机制进行辅助条件控制,在前面的文章中已经有过整理,可以参看:

  • 使用if:https://liumiaocn.blog.csdn.net/article/details/92851099
  • 使用when:https://liumiaocn.blog.csdn.net/article/details/92817179

以Jenkins的when为例,内置了很多支持。但是不熟悉的人还是希望直接使用bash。虽然里面已经有script可以更容易的写脚本,如果希望写到一行中,可以参考一下如下的代码示例。这并不算是一个好的做法,但是对于有脚本书写经验的开发者来说不需要学习任何东西。

stage('Prepare Angular Project') { // prepare angular demo app    sh 'if [ ! -d demo ]; then ng new demo --style less; fi'   }

不过一旦当内容变得复杂,显然写在一行将会越来越复杂,如果你的功能不是很复杂,这是一种凑合过的方式。

另外,这行这么简单的if语句,能不能替换成 ! test -d demo && ng new demo --style less呢,答案是不能。因为当路径存在的时候,可能希望的动作是继续往下走,而不是一个只能执行一次的Job,&&会因为test命令的失败直接使得Job的执行异常而中断。

当前目录

cd demo、npm install、npm run build这本是三条命令,强硬地使用&&写在了一起,为什么不能分开使用三个sh ''的原因是因为,在具体的实现的时候,显然执行完返回当前目录会恢复为原始状态。这是一个非常容易被忘记的问题。

stage('Build Angular Project') { // build angular demo app    sh 'cd demo && npm install && npm run build'   }

转载地址:https://liumiaocn.blog.csdn.net/article/details/102632742 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:NodeJS插件验证:Jenkins官方Alpine镜像之LTS版本
下一篇:Jenkins基础:获取Jenkins-Crumb的错误信息与对应方法

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年04月07日 23时31分31秒