持续集成体系介绍
持续集成
- 持续开发新功能
- 将新功能集成到产品主干中
Continuous Integration(CI)
持续交付
- 持续集成到下一步,将集成后到软件交付给用户
Continuous Delivery(CD)
- 设计、开发、测试、交付…
- 支撑概念-自动化
- 自动构建,自动测试,自动发布
- 快速,高效,易回溯
- 支撑平台- Jenkins
持续集成的核心价值
- 集成自动化测试,减少重复劳动
- 尽早发现和解决缺陷,减少风险
- 形成有机整体,明确阶段交付物
常见持续集成方案
- 阶段化
- 过程式
- 管道式(Pipeline)
阶段化
- 为不同的构建测试套件建立不同的 CI 循环周期
- 单元测试运行时间短,反馈较快,所以可以频繁进行
- 自动化测试的时间比较长,占用资源比较多,适当减少集成次数
过程式
- 将每一个步骤单元化并顺序执行
- 将构建与测试分离以节省时间
管道式
- 所有的过程单元都运行在同一管道的上下文中,代码基线相同
- 当持续集成服务器发现有新的代码时,会创建新的一个管道
- 所有的过程单元都在这一个管道中运行
- 每个单元产生的产物也在该管道中有效
持续集成自动化测试
- Jenkins Pipeline
mkdir jenkins_2
ls
docker stop jenkins_1
chmod 777 jenkins_2
docker run -d --name jenkins_2 -v ${PWD}/jenkins_2:/var/jenkins_home -p 8080:8080 -p 50000:50000 jenkins/jenkins:lts
tomcat下启动jenkins
127.0.0.1:8080/jenkins
Jenkins 安装
Jenkins 安装
- 过 war 包安装:
- 通过安装包安装(不推荐):
- 下载站点: https://jenkins.io/download/ 下载对应的 dmg 或 exe 文件
- 通过 docker 命令安装(推荐 Linux 环境):
docker pull jenkins/jenkins:lts
war 包启动-通过 jar 包
- 通过命令启动:
java -jar jenkins.war
- 访问
localhost:8080/jenkins
war 包启动-通过 tomcat
- 将
jenkins.war
放到 tomcat 的 webapps 下 - 启动 tomcat
- 访问 localhost:8080/jenkins
通过 Docker 安装-前提条件
- 前提条件:
- Linux服务器已安装Docker
- 如果是云服务器,需要配置安全组的端口(配图)
通过 Docker 安装-步骤
- 创建挂载文件:
docker volume create jenkins_1
- 启动 jenkins 容器:
docker run -d --name jenkins_1 -v jenkins_1:/var/jenkins_home -p 8080:8080 -p 50000:50000 jenkins/jenkins:lts
- 进入 Jenkins 服务地址 http://:8080/
初始化 Jenkins 应用
- 访问 Jenkins 服务地址
http://YOUR_IP:8080/
- 获得初始管理密码(注意):
- 进入 docker 容器内部:
docker exec -it jenkins_1 bash
cat jenkins_1/secrets/initialAdminPassword
- 进入 docker 容器内部:
Jenkins 结构配置
目录
- 任务配置组成
- 常用配置项
任务配置
任务是 jenkins 的核心功能,决定了 jenkins 怎么去执行
创建任务
路径 Dashboard → 新建任务
任务配置组成
- 常规 General
- 源码管理
- 构建触发器
- 构建环境
- 构建
- 构建后动作
常规 General
- 描述
- 丢弃旧的构建
- 参数构建过程
- 关闭构建
- 在必要的时候并发构建
- 静默期
- 重试次数
- 该项目的上游项目正在构建时阻止构建
- 该项目的下游项目正在构建时阻止构建
- 使用自定义的工作空间
- 显示名称
源码管理
- 无
- Git
- 仓库(Repository)
- 构建分支(Branches to build)
- 源码库管理器
- 附加行为(Additional Behaviours)
构建触发器
- 触发远程构建
- 其他工程构建后触发
- 定时构建
- 轮询 SCM
构建环境
- Use secret text(s) or file(s)?
构建
- 执行 Windows 批处理命令
- 执行 shell
- 调用顶层 Maven 目标
构建后动作
- 归档成品
- 构建其他工程
- 记录文件的指纹用于追踪
- Git Publisher
- E-mail Notification
Jenkins 用户管理
用户管理简介
- Jenkins是多用户的系统
- Jenkins能使用其他的插件让不同用户访问系统不同功能
- 用户能注册或者是管理员进行增删改查
用户列表界面
- 菜单:面板/系统管理/管理用户
- 常用操作:
- 新建用户
- 删除用户
- 修改用户
新建用户
修改用户
- 账号名称
- 描述
- API Token
- 凭据
- 密码
- SSH Public Keys
- 用户定义的时区
- Asia/Shanghai
删除用户
- 点击删除图标
Jenkins 授权策略配置
把对应的人拉到角色里面去
授权策略配置
- 不同用户对系统功能的需求不同
- 出于安全等考虑,关键的、重要的系统功能需限制部分用户的使用
- 出于方便性考虑,系统功能需要根据不同的用户而定制
安装插件
- 插件:
Role-based Authorization Strategy
授权策略
- 选择
Role-Based Strategy
管理和分配角色
管理角色
- 全局角色
Global roles
管理角色
- 项目角色
Item roles
- 节点角色
Node roles
分配角色
- 全局角色
Global roles
- 项目角色
Item roles
- 节点角色
Node roles
Jenkins 安全配置管理
安全配置管理
Jenkins拥有良好的扩展性,如远程执行、接口调用等,但需要考虑到网络安全的因素,所以Jenkins将这些功能配置化,按需设置。
全局安全配置
- 菜单:面板/系统管理/安全/全局安全配置
- 配置项:
- 认证(Authentication)
- 标记格式器
- 代理
- 跨站请求伪造保护(CSRF)
- 隐藏的安全警告
- API Token
- SSH Server
认证 Authentication
- 不要记住我
- 安全域
- Jenkins 专有用户数据库
- Servlet 容器代理
- None
- 授权策略
- 任何用户可以做任何事(没有任何限制)
- 登录用户可以做任何事
- 遗留模式
标记格式器
- 纯文本
代理
- 代理的 TCP 端口
- 指定端口(50000)
- 随机选取
- 禁用
跨站请求伪造保护
- Crumb Issuer
- 启用代理兼容
隐藏的安全警告
API Token
- 为每个新创建的用户生成一个遗留的 API token (不建议)
- 允许用户手动创建一个遗留的 API token (不建议)
- 启用 API Token 使用统计(推荐)
SSH Server
- SSHD Port
- 指定端口
- 随机选取
- 禁用
Jenkins Job 实操
任务配置组成
- General
- 源码管理
- 构建触发器
- 构建
- 构建后动作
常规 General
- 参数化构建过程
源码管理
- Git 仓库配置
- 仓库(Repository)
- 构建分支(Branches to build)
构建触发器
- 定时构建
-
H/2 * * * *
构建
- 执行
shell
构建后动作
- 归档成品
执行结果
Jenkins凭据管理
Jenkins凭据管理
凭据管理的作用:管理ssh、邮箱、git等认证信息
凭据管理入口
Dashboard → 系统管理(Manage Jenkins) → Manage Credentials
凭据的新增
- Dashboard → 系统管理(Manage Jenkins) → Manage Credentials → Stores scoped to Jenkins ->添加凭据
- 各种配置页面上的 Credentials 添加
用户名和密码方式的凭据配置
类型选择Username with password - 用户名 - 密码
SSH密钥方式的凭据配置
类型选择SSH Username with private key - Username - Private Key → Enter directly
凭据的更新和删除
- Dashboard → 系统管理(Manage Jenkins) → Manage Credentials → Stores scoped to Jenkins 点击工具符号
- Dashboard → 系统管理(Manage Jenkins) → Manage Credentials 点击凭据
凭据的使用
下拉选择
Jenkins环境变量
Jenkins环境变量
Jenkins 环境变量就是通过 env 关键字暴露出来的全局变量,可以在 Jenkins 文件的任何位置使用
环境变量分类
- 系统内置环境变量
- 用户自定义环境变量
常用内置环境变量
- BUILD_NUMBER
- BUILD_URL
- JOB_NAME
- GIT_URL
用户自定义环境变量新增
全局环境变量入口 Dashboard → 系统管理(Manage Jenkins) → 系统配置(Configure System)-> 全局属性
环境变量的使用
$变量名称
Jenkins 参数化 Job
参数化 Job 使用场景
- 同一个项目需要在不同环境下测试
参数化 Job 的配置
- 选择参数化构建过程,选择选项参数
- 名称填入 env
- 选项配置三个值分别: dev、test、online
- 添加描述
配置shell
# 判断 env 参数的值,如果是dev,则输出 dev runtime
if [ "$env" = "dev" ]
then echo "dev runtime"
# 判断 env 参数的值,如果是test,则输出 test runtime
elif [ "$env" = "test" ]
then echo "test runtime"
# 判断 env 参数的值,如果是online,则输出 online runtime
elif [ "$env" = "online" ]
then echo "online runtime"
# 判断 env 参数的值,如果是其他,则输出 other runtime
else echo "other runtime"
fi
运行效果
- 保存
- 选择 Build with Parameters
- 在右侧选择需要构建的参数
- 点击开始构建
- 查看运行的日志
JenkinsSSHAgent插件
SSHAgent 的集成
在 Jenkins 配置从节点执行构建操作的时候需要用到 SSHAgent
下载 SSHAgent 插件
- 进入菜单 Dashboard → 系统管理(Manage Jenkins) → 插件管理(Manage Plugins)
- 在可选插件搜索 SSH Build Agents plugin 安装
SSHAgent 相关使用
在节点管理中,能使用ssh节点 选项为 Launch agents via SSH