Jenkins基础:Jenkinsfile注意事项:条件跳转与当前路径

在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'
   }
淼叔 CSDN认证博客专家 神经网络 TensorFlow NLP
资深架构师,PMP、OCP、CSM、HPE University讲师,EXIN DevOps Professional与DevOps Master认证讲师,曾担任HPE GD China DevOps & Agile Leader,帮助企业级客户提供DevOps咨询培训以及实施指导。熟悉通信和金融领域,有超过十年金融外汇行业的架构设计、开发、维护经验,在十几年的IT从业生涯中拥有了软件开发设计领域接近全生命周期的经验和知识积累,著有企业级DevOps技术与工具实战。
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页