持续集成持续交付Devops-可乔

持续集成体系介绍

持续集成

  • 持续开发新功能
  • 将新功能集成到产品主干中
  • Continuous Integration(CI)

持续交付

  • 持续集成到下一步,将集成后到软件交付给用户
  • Continuous Delivery(CD)
  • 设计、开发、测试、交付…
  • 支撑概念-自动化
    • 自动构建,自动测试,自动发布
    • 快速,高效,易回溯
  • 支撑平台- Jenkins

持续集成的核心价值

  • 集成自动化测试,减少重复劳动
  • 尽早发现和解决缺陷,减少风险
  • 形成有机整体,明确阶段交付物

常见持续集成方案

  • 阶段化
  • 过程式
  • 管道式(Pipeline)

阶段化

  • 为不同的构建测试套件建立不同的 CI 循环周期
  • 单元测试运行时间短,反馈较快,所以可以频繁进行
  • 自动化测试的时间比较长,占用资源比较多,适当减少集成次数
    image

过程式

管道式

  • 所有的过程单元都运行在同一管道的上下文中,代码基线相同
  • 当持续集成服务器发现有新的代码时,会创建新的一个管道
  • 所有的过程单元都在这一个管道中运行
  • 每个单元产生的产物也在该管道中有效

持续集成自动化测试

  • Jenkins Pipeline

image

image

image

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
image

image

127.0.0.1:8080/jenkins

Jenkins 安装

Jenkins 安装

war 包启动-通过 jar 包

  1. 通过命令启动: java -jar jenkins.war
  2. 访问 localhost:8080/jenkins

war 包启动-通过 tomcat

  1. jenkins.war 放到 tomcat 的 webapps 下
  2. 启动 tomcat
  3. 访问 localhost:8080/jenkins

通过 Docker 安装-前提条件

  • 前提条件:
    • Linux服务器已安装Docker
    • 如果是云服务器,需要配置安全组的端口(配图)

通过 Docker 安装-步骤

  1. 创建挂载文件:docker volume create jenkins_1
  2. 启动 jenkins 容器: docker run -d --name jenkins_1 -v jenkins_1:/var/jenkins_home -p 8080:8080 -p 50000:50000 jenkins/jenkins:lts
  3. 进入 Jenkins 服务地址 http://:8080/

初始化 Jenkins 应用

  • 访问 Jenkins 服务地址
    • http://YOUR_IP:8080/
  • 获得初始管理密码(注意):
    1. 进入 docker 容器内部:docker exec -it jenkins_1 bash
    2. cat jenkins_1/secrets/initialAdminPassword

Jenkins 结构配置

image

目录

  • 任务配置组成
  • 常用配置项

任务配置

任务是 jenkins 的核心功能,决定了 jenkins 怎么去执行

创建任务

路径 Dashboard → 新建任务

任务配置组成

常规 General

  • 描述
  • 丢弃旧的构建
  • 参数构建过程
  • 关闭构建
  • 在必要的时候并发构建
  • 静默期
  • 重试次数
  • 该项目的上游项目正在构建时阻止构建
  • 该项目的下游项目正在构建时阻止构建
  • 使用自定义的工作空间
  • 显示名称

源码管理

  • Git
    • 仓库(Repository)
    • 构建分支(Branches to build)
    • 源码库管理器
    • 附加行为(Additional Behaviours)
      image

构建触发器

  • 触发远程构建
  • 其他工程构建后触发
  • 定时构建
  • 轮询 SCM
    image

构建环境

  • Use secret text(s) or file(s)?
    image

构建

  • 执行 Windows 批处理命令
  • 执行 shell
  • 调用顶层 Maven 目标
    image

构建后动作

  • 归档成品
  • 构建其他工程
  • 记录文件的指纹用于追踪
  • Git Publisher
  • E-mail Notification
    image

Jenkins 用户管理

用户管理简介

  • Jenkins是多用户的系统
  • Jenkins能使用其他的插件让不同用户访问系统不同功能
  • 用户能注册或者是管理员进行增删改查

用户列表界面

  • 菜单:面板/系统管理/管理用户
  • 常用操作:

新建用户

修改用户

  • 账号名称
  • 描述
  • API Token
  • 凭据
  • E-mail
  • 密码
  • SSH Public Keys
  • 用户定义的时区
    • Asia/Shanghai

删除用户

image

Jenkins 授权策略配置

image

image

image

把对应的人拉到角色里面去
image

授权策略配置

  • 不同用户对系统功能的需求不同
  • 出于安全等考虑,关键的、重要的系统功能需限制部分用户的使用
  • 出于方便性考虑,系统功能需要根据不同的用户而定制

安装插件

授权策略

管理和分配角色

管理角色

管理角色

分配角色

Jenkins 安全配置管理

安全配置管理

Jenkins拥有良好的扩展性,如远程执行、接口调用等,但需要考虑到网络安全的因素,所以Jenkins将这些功能配置化,按需设置。

全局安全配置

  • 菜单:面板/系统管理/安全/全局安全配置
  • 配置项:
    • 认证(Authentication)
    • 标记格式器
    • 代理
    • 跨站请求伪造保护(CSRF)
    • 隐藏的安全警告
    • API Token
    • SSH Server

认证 Authentication

  • 不要记住我
  • 安全域
    • Jenkins 专有用户数据库
    • Servlet 容器代理
    • None
    • 授权策略
      • 任何用户可以做任何事(没有任何限制)
      • 登录用户可以做任何事
      • 遗留模式

标记格式器

代理

  • 代理的 TCP 端口
    • 指定端口(50000)
    • 随机选取
    • 禁用

跨站请求伪造保护

隐藏的安全警告

API Token

  • 为每个新创建的用户生成一个遗留的 API token (不建议)
  • 允许用户手动创建一个遗留的 API token (不建议)
  • 启用 API Token 使用统计(推荐)

SSH Server

  • SSHD Port
    • 指定端口
    • 随机选取
    • 禁用

Jenkins Job 实操

任务配置组成

常规 General

源码管理

构建触发器

构建

构建后动作

执行结果

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 的配置

  1. 选择参数化构建过程,选择选项参数
  2. 名称填入 env
  3. 选项配置三个值分别: dev、test、online
  4. 添加描述

配置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

运行效果

  1. 保存
  2. 选择 Build with Parameters
  3. 在右侧选择需要构建的参数
  4. 点击开始构建
  5. 查看运行的日志

JenkinsSSHAgent插件

SSHAgent 的集成

在 Jenkins 配置从节点执行构建操作的时候需要用到 SSHAgent

下载 SSHAgent 插件

  1. 进入菜单 Dashboard → 系统管理(Manage Jenkins) → 插件管理(Manage Plugins)
  2. 在可选插件搜索 SSH Build Agents plugin 安装

SSHAgent 相关使用

在节点管理中,能使用ssh节点 选项为 Launch agents via SSH

【实战】jenkinsapi接口

image

image

image

image

image

持续集成