Jenkins的pipeline

说明

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

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

通常流程

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
            '''
        }
    }
}

例子中用到了几个方法npm

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

条件判断

在构建项目时,咱们能够写一些条件,例如在一个新的服务器上进行完整的安装时,咱们能够不经过命令行进行git clone把项目拉下来,能够经过判断目标目录是否有项目,而后决定咱们是git clone 仍是 git fetch originapi

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数组中添加更多的变量,以下面的例子app

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中使用变量,能够写做fetch

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后的是"",否则会出现错误ui

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

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

相关文章
相关标签/搜索