Jenkins

Jenkins 的本质,其实是将原来平时手工操作的测试、部署用脚本实现自动化,并提供了一个可视化的界面,来查看自动化操作之后的结果。它让很多常规的测试和部署工作在操作一次,后续可以重复使用,提高了开发效率;

流水线 pipeline

pipeline 是一个不错的理念,它通过 DSL(支持声明式或脚本式两种风格),将前述的自动化操作,用代码的方式表达出来,这样让每个团队成员更容易阅读理解,并可以随着代码进行版本管理,实现跟实际代码版本的匹配,以及实现可追溯;

名称解释

pipeline: 用来定义构建流程,包括构建、测试、部署等环节;
node:节点,表示一台机器,是构建环境的组成部分,可用来执行 pipeline 代码;
stage: 阶段,流水线任务中的不同阶段,例如构建阶段、测试阶段、部署阶段等;每个阶段由1到多个任务组成,
step: 任务,用来告知 jenkins 在某个时点,应该做的操作,例如执行某个 shell 命令;

声明式 Pipeline

使用 Pipeline

前提条件

  • Jenkins 2.x 以上版本;
  • 已安装 Pipeline 插件;

定义 Pipeline

有三种方法:

  • 使用 Blue Ocean 插件;
  • 使用 UI 界面;
  • 在源代码中手写 Jenkinsfile 文件;

自动生成代码片段

创建 Pipeline 项目后,在项目主页的左侧,有一个 Pipeline Syntax 菜单项,可以用来学习如何写 Jenkinsfile;

使用全局变量

  • env
  • params
  • currentBuild

使用 Jenkinsfile

将 Jenkinsfile 放入代码所在的文件夹,一同纳入版本管理后,当 git push 到 github 后,通过 github 的 webhook,会触发 Jenkins 的自动构建;之后 Jenkins 会从 github 摘取最新版本的代码,并按照 Jenkinsfile 中写法的 pipeline 内容自动进行构建、测试和部署等操作;

字符串

def str = “World”

注意需要使用双引号来包含字符串,因为只有双引号括起来的字符串,后续才可以使用美元符 $ 进行引用,例如: ${str}

环境变量

  • BUILD_ID
  • BUILD_NUMBER
  • BUILD_TAG
  • BUILD_URL
  • EXECUTOR_NUMBER
  • JAVA_HOME
  • JENKINS_URL
  • JOB_NAME:项目名称
  • NODE_NAME:机器节点名称,例如 master
  • WORKSPACE: WORKSPACE 绝对路径

环境变量通过 $ {env.变量名} 进行访问,例如:”${env.BUILD_ID}”

设置静态环境变量

设置动态环境变量

调用 sh 执行命令,获取 returnStdout 或者 returnStatus 的返回结果,赋值给相应的变量;

处理机密信息

文本、用户名、密码和机密文件

声明式的 Pipeline 通过在 environment 指令中使用 credentials(“凭据ID”) 函数来读取在全局凭据中提前设置好的文本、用户名、密码、机密文件等机密信息,并赋值给相应的变量,以便后续阶段可用凭据 ID 进行调用;

处理参数

使用 parameters 指令,可以在运行时接用户指定的参数;

处理失败

通过在 post 代码块中,指定一些构建结束后要运行的操作;

使用多个 agents

适用一些复杂的用例,例如构建后,在不同平台(linux\windows)进行测试

可选的命令参数

命令的参数可以不用括号,并直接指定参数名称;

以下两种格式都是可以的:

当命令只有一个参数时,则还可以省略参数名

高级的指令

并行执行

使用 Docker

当在 Jenkinsfile 中指定了镜像后,Jenkins 会自动创建基于该镜像的容器,并在容器中执行相应的指令;

容器数据缓存

通过映射本地目录,可以存储容器中的数据

使用多个容器

使用 Dockerfile


Jenkins
https://ccw1078.github.io/2020/03/31/Jenkins/
作者
ccw
发布于
2020年3月31日
许可协议