Jenkins高级用法 - Jenkinsfile 介绍及实战经验

Posted DotNet技术栈知识分享

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jenkins高级用法 - Jenkinsfile 介绍及实战经验相关的知识,希望对你有一定的参考价值。

一.什么是 Jenkinsfile

Jenkinsfile 是 Jenkins 2.x 核心特性 Pipeline 的脚本,由Groovy语言实现。Jenkinsfile一般是放在项目根目录,随项目一起受源代码管理软件控制,无需像创建“自由风格"(Jenkins FreeStyle)项目一样,每次可能需要拷贝很多设置到新项目,提供了一些直接的好处:

  • Pipeline上的代码审查/迭代

  • Pipeline的审计跟踪

  • Pipeline的唯一真实来源,可以由项目的多个成员查看和编辑。

Pipeline支持:Declarative(在Pipeline 2.5中引入)和Scripted Pipeline两种格式。两者都支持建立Pipeline,两者都可以用于在Web UI中定义一个流水线Jenkinsfile,将Jenkinsfile文件创建并检查到源代码控制库中通常被认为是最佳做法。

Jenkins高级用法 - Jenkinsfile 介绍及实战经验
aaa

更多详细信息参考:玩转Jenkins Pipeline(大宝鱼) 推荐必读

二. Jenkinsfile 实战经验

看本小节之前,如果你不熟悉 Jenkinsfile 那么推荐一定要阅读,第一小节推荐的文章,里面介绍了很多基本用法。

这里的实战主要讲声明式 Jenkinsfile,因为声明式 Jenkinsfile是 Pipeline 2.5 引入的,比之以前的脚本式会有一些更先进的设计和更快捷的用法,且声明式Jenkinsfile还兼容脚本式语法。这里主要讲一些博主实际用的过程中的经验。

1.在指定的Jenkins集群结点上运行

pipeline {
    agent {
        node {
            label 'slave-1'
        }
    }
}

label 指你的集群结点名称

2.定义环境变量

pipeline {
    environment {
        NUGET_KEY     = 'abc'
    }
}

使用:

env.NUGET_KEY

sh里使用

$NUGET_KEY

例子:

输出该环境变量

echo "${env.NUGET_KEY}"

sh:

sh 'echo $NUGET_KEY'

这里要注意在 sh 语句块里使用的不同。

3.设置 github webhook 触发器

triggers {
      githubPush()
}

UI上没有没有设置github webhook触发的。脚本设置后,需要到 【系统管理】->【系统设置】里,手动注册一下github webhook即可

4.常用的预置环境变量

变量名 说明
BRANCH_NAME 当前分支名称
GIT_COMMIT 当前 commit hash
GIT_PREVIOUS_SUCCESSFUL_COMMIT 上一次构建成功 cimmit hash

示例:

echo "branch: ${env.BRANCH_NAME}"
echo "current SHA: ${env.GIT_COMMIT}"
echo "previous SHA: ${env.GIT_PREVIOUS_SUCCESSFUL_COMMIT}"script

5.script块

script 块里可以写脚本式Jenkinsfile的语法

例子:

stages {
        stage('Build') {
            steps {
                script {
                    result = sh (script: "git log -1|grep 'Release'", returnStatus: true
                    echo "result: ${result}"
                }
            }
        }
    }

6.设置构建结果

post { always { script { currentBuild.result = 'NOT_BUILT' } } }

一般放在 POST 语句块

7.敏感数据设置

一些敏感数据,比如账号密码,不可能卸载脚本中。

Jenkins高级用法 - Jenkinsfile 介绍及实战经验
1544687837595

类型选择 Secret text,Secret 输出你的 账号/密码等。然后记住你设置的ID,待会要用

可以通过 credentials函数来获取

credentials('<凭据id>')

例如

credentials('test')

直接输出到控制台也会加密:

1544687975228

8.定义变量

def cusversion="Jenkinsfile"

必须放在 pipeline 前面或者 script 语句块里面

1544695268853

9.指定分支运行stage

stage('Deploy') {
            when {
                branch "<分支名称>"
            }
}

三.扩展阅读

Jenkinsfile 语法 https://jenkins.io/doc/book/pipeline/syntax

玩转Jenkins Pipeline https://blog.csdn.net/diantun00/article/details/81075007


以上是关于Jenkins高级用法 - Jenkinsfile 介绍及实战经验的主要内容,如果未能解决你的问题,请参考以下文章

Jenkins:是不是可以使用 Jenkinsfile 创建常春藤工作? (管道即代码)

jenkins pipline和jenkinsfile

jenkins pipline 和 jenkinsfile

使用 Jenkinsfile 构建 Jenkins 管道没有失败

在 Jenkins Pipeline/Jenkinsfile 中获取 git 分支名称

jenkins-使用Jenkinsfile来定义pipeline