Jenkins的pipeline

说明

再官网文档上有说明pipeline的工作流程,具体可以参考pipeline文档语法文档。 这里将pipeline的生命周期图贴出来 img

我们暂时不会用到完整的流程,只摘取有用的部分,完成最小的流程即可,下面是我举的几个实际例子

一般流程

node {
    dir('/home/share/node/falcon') {
        stage("git") {
            sh "git fetch origin"
            sh "git checkout -f origin/master"
        }
        stage("cpm install") {
            sh "cnpm install"
        }
        stage("build") {
            sh "npm run build"
        }
        stage("restart server") {
            sh '''
            pm_result=`pm2 ls`
            if [[ $pm_result =~ `pwd` ]]
            then
              echo "`pwd` exists, restart"
              pm2 delete app.js
              pm2 start app.js --name `pwd`
              exit 0
            else
              pm2 start app.js --name `pwd`
            fi
            '''
        }
    }
}

例子中用到了几个方法

  • dir() 更换执行目录,jenkins默认的执行目录在环境设置中设置,默认是/,如果我们使用的是multibranch pipeline的话,它会在jenkins的安装目录下找到workspace进行pipeline操作,目前来说,太麻烦了,所以就直接在脚本中设置好执行目录
  • stage() 方法是阶段的名称,这个是完全自定义的,相当于给构建流程中的某些步骤称为一个阶段,比如git操作阶段、安装依赖阶段、编译阶段、发布阶段,具体效果可以到 构建 章节看
  • sh 后接的就是命令行操作了,如果只有一行,那么用''或者用""包裹起来,如果有多行的话,用'''包裹

条件判断

在构建项目时,我们可以写一些条件,例如在一个新的服务器上进行完整的安装时,我们可以不通过命令行进行git clone把项目拉下来,可以通过判断目标目录是否有项目,然后决定我们是git clone 还是 git fetch origin

node {
    dir('/home/share/www') {
        stage('Git') {
            if(fileExists('openapi')) {
                dir('/home/share/www/openapi') {
                    sh 'git fetch origin'
                    sh 'git checkout master'
                    sh 'git pull'
                }
            } else {
                sh 'git clone git@git.coding.net:flashtd1/DPOpenAPI.git openapi'
            }
        }
    }
}

交互流程

在进行版本切换的时候,需要手动输入一些内容,比如分支名称,commit名称等,所以需要用户输入变量,下面举个例子

node {
    stage('Git') {
        def branch = input message: 'input branch name for this job', ok: 'ok', parameters: [string(defaultValue: 'master', description: 'branch name', name: 'branch')]

        echo branch
    }
}

执行上述例子,会出现如下情况 img 当输入后,会得到如下结果 img

如果一次性想输入多个参数,可以在parameters数组中添加更多的变量,如下面的例子

node {
    stage('Git') {
        def input_result = input message: 'input branch name for this job', ok: 'ok', parameters: [string(defaultValue: 'master', description: 'branch name', name: 'branch'), string(defaultValue: '', description: 'commit to switch', name: 'commit')]

        echo input_result.branch
        echo input_result.commit
    }
}

除了用.的形式,也可以用['branch']这样的形式,如果要在sh中使用变量,可以写作

node {
    stage('Git') {
        def input_result = input message: 'input branch name for this job', ok: 'ok', parameters: [string(defaultValue: 'master', description: 'branch name', name: 'branch'), string(defaultValue: '', description: 'commit to switch', name: 'commit')]

        sh "echo ${input_result.branch}"
        sh "echo ${input_result.commit}"
    }
}

注意sh后的是"",不然会出现错误

这里只举了简单的字符串输入的情况,其实还有很多可以输入的类型,不过文档里并没有写的很详细。这里介绍一下Jenkins的语法生成器,一些插件生成脚本的语句都可以在这里调出来

在Pipeline编辑的输入框下,有一个Pipeline Syntax超链接 img红色标记的下拉框中可以找到已经安装了插件的支持编写脚本的选项列表,这里用input来举例 imgimg 按照提示填完后,可以点击下面的Generate Pipeline Script按钮生成脚本 img生成的脚本就可以复制到自己的脚本里啦

posted @ 2017-09-13 23:45  张发财  阅读(...)  评论(... 编辑 收藏