系列目录

1.Jenkins 安装

2.Jenkins 集群

3.Jenkins 持续集成 - ASP.NET Core 持续集成(Docker&自由风格&Jenkinsfile)

4.Jenkins 高级用法 - Pipeline 安装

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

6.Jenkins 高级用法 - Blue Ocean 使用

7.Jenkins 高级用法 - 根据 git commit 控制构建过程

8.Jenkins 高级用法 - 微服务DevOps实战(ASP.NET Core)

常见问题:

1.Jenkins 时区设置

2.Jenkins 无法捕获构建脚本错误问题

一.什么是 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 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 地址 /credentials/store/system/domain/_/):

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

可以通过 credentials函数来获取

credentials('<凭据id>')

例如

credentials('test')

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

8.定义变量

def cusversion="Jenkinsfile"

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

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 介绍及实战经验的更多相关文章

  1. Jenkins高级用法 - Pipeline 安装

    一.总体介绍 总体介绍内容摘自 玩转Jenkins Pipeline(大宝鱼) 1.核心概念 Pipeline,简而言之,就是一套运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的 ...

  2. LinqToXml高级用法介绍

    LinqToXml高级用法介绍 一.函数构造 什么是函数构造?其是指通过单个语句构建XML树的能力. 那么它有什么作用呢? 作用1.用单个表达式快速创建复杂的XML树 见实例代码CreateXml( ...

  3. Nmap在实战中的高级用法(详解)

    @ 目录 Nmap在实战中的高级用法(详解) Nmap简单的扫描方式: 一.Nmap高级选项 1.查看本地路由与接口 2.指定网口与IP地址 3.定制探测包 二.Nmap扫描防火墙 1.SYN扫描 2 ...

  4. 多年经验,教你写出最惊艳的 Markdown 高级用法

    点赞再看,养成习惯,微信搜索[高级前端进阶]关注我. 本文 GitHub https://github.com/yygmind 已收录,有一线大厂面试完整考点和系列文章,欢迎 Star. 最近在学习的 ...

  5. 多年经验总结,写出最惊艳的 Markdown 高级用法

    点赞再看,养成习惯,微信搜索[高级前端进阶]关注我. 本文 GitHub https://github.com/yygmind 已收录,有一线大厂面试完整考点和系列文章,欢迎 Star. 最近在学习的 ...

  6. 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 特殊问题和实战经验(五)

    RAC 特殊问题和实战经验(五) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总.然后形成体 ...

  7. 细说 ASP.NET Cache 及其高级用法

    许多做过程序性能优化的人,或者关注过程程序性能的人,应该都使用过各类缓存技术. 而我今天所说的Cache是专指ASP.NET的Cache,我们可以使用HttpRuntime.Cache访问到的那个Ca ...

  8. 细说 ASP.NET Cache 及其高级用法【转】

    阅读目录 开始 Cache的基本用途 Cache的定义 Cache常见用法 Cache类的特点 缓存项的过期时间 缓存项的依赖关系 - 依赖其它缓存项 缓存项的依赖关系 - 文件依赖 缓存项的移除优先 ...

  9. Python进阶:切片的误区与高级用法

    2018-12-31 更新声明:切片系列文章本是分三篇写成,现已合并成一篇.合并后,修正了一些严重的错误(如自定义序列切片的部分),还对行文结构与章节衔接做了大量改动.原系列的单篇就不删除了,毕竟也是 ...

随机推荐

  1. LNMP单点服务器搭建

    一.部署服务器环境 Linux:centos6.5 nginx:1.14.0 mysql:5.6.33 php:5.6.36 1.网络配置 2.FQDN /etc/hosts /etc/sysconf ...

  2. BZOJ_3238_[Ahoi2013]差异_后缀自动机

    BZOJ_3238_[Ahoi2013]差异_后缀自动机 Description Input 一行,一个字符串S Output 一行,一个整数,表示所求值 Sample Input cacao Sam ...

  3. Python Django 1.Hello Django

    #安装Djangopip install Django #==版本号#选择路径:D:#任意文件夹名 cd Django #罗列Django所提供的命令,其中startproject命令来创建项目 dj ...

  4. jquery 判断一个元素是否在数组中 $.inarry()使用

    需要判断一个元素是否在一个数组里: js indexOf()方法  如果存在 则返回该元素的下标值 如果不存在则返回-1 学习源头: http://www.w3school.com.cn/jsref/ ...

  5. js的赋值问题:值传递还是引用传递?

    ECMAScript中有5种简单数据类型(也称为基本数据类型):Undefined.Null.Boolean.Number和String.还有1种复杂数据类型--Object,Object本质上是由一 ...

  6. python获取当前时间

    import time time = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime()) print("当前时间:",time) ...

  7. TensorFlow TensorBoard使用

    摘要: 1.代码例子 2.主要功能内容: 1.代码例子 <TensorFlow实战>使用MLP处理Mnist数据集并TensorBoard上显示 2.主要功能 执行TensorBoard程 ...

  8. 【Python3爬虫】你会怎么评价复仇者联盟4?

    一.写在前面 最近复仇者联盟4正在热映中,很多人都去电影院观看了电影,那么对于这部电影,看过的人都是怎么评价的呢?这时候爬虫就可以派上用场了! 二.主要思路 首先打开豆瓣电影,然后进入复仇者联盟4的详 ...

  9. TensorFlow从1到2(一)续讲从锅炉工到AI专家

    引言 原来引用过一个段子,这里还要再引用一次.是关于苹果的.大意是,苹果发布了新的开发语言Swift,有非常多优秀的特征,于是很多时髦的程序员入坑学习.不料,经过一段头脑体操一般的勤学苦练,发现使用S ...

  10. 我的Lambda的学习笔记

    前述 Lambda表达式是 Java 8 的新特性.许多语言都有 Lambda 的特性. 因此使用的 Java 环境一定要 8 以上的环境. Lambda 到底什么是 Lambda 表达式呢? Lam ...