🗒️Jenkins实践

type
status
slug
date
summary
tags
category
password
icon

介绍

DevOps是什么

DevOps: Development 和 Operations 的组合
  • DevOps 看作开发(软件工程)、技术运营和质量保障(QA)三者的交集。
  • 突出重视软件开发人员和运维人员的沟通合作,通过自动化流程来使得软件构建、测试、 发布更加快捷、频繁和可靠。
  • DevOps 希望做到的是软件产品交付过程中 IT 工具链的打通,使得各个团队减少时间损 耗,更加高效地协同工作。专家们总结出了下面这个 DevOps 能力图,良好的闭环可以大大 增加整体的产出。
  • 目前我们通过TAPD敏捷研发协作云平台做项目管理

CICD是什么

1、持续集成(Continuous Integration)
持续集成是指软件个人研发的部分向软件整体部分交付,频繁进行集成以便更快地发现 其中的错 误。“持续集成”源自于极限编程(XP),是 XP 最初的 12 种实践之一。
CI 需要具备这些:
全面的自动化测试。这是实践持续集成&持续部署的基础,同时,选择合适的 自动化测试工具也极 其重要;
灵活的基础设施。容器,虚拟机的存在让开发人员和 QA 人员不必再大费周折;
版本控制工具。Git,CVS,SVN 等;
自动化的构建和软件发布流程的工具,如 Jenkins,flow.ci;
反馈机制。如构建/测试的失败,可以快速地反馈到相关负责人,以尽快解决达到一个更稳定的版本。
2、持续交付(Continuous Delivery)
持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」(production-like environments)中。持续交付优先于整个产品生命周期的软件部署,建立 在高水平自动化持续集成之上。
持续交付和持续集成的优点非常相似:
快速发布。能够应对业务需求,并更快地实现软件价值。
编码->测试->上线->交付的频繁迭代周期缩短,同时获得迅速反馈;
高质量的软件发布标准。整个交付过程标准化、可重复、可靠,
整个交付过程进度可视化,方便团队人员了解项目成熟度;更先进的团队协作方式。从需求分析、产品的用户体验到交互 设计、开发、测试、运维等角色密 切协作,相比于传统的瀑布式软件团队,更少浪费。
3、持续部署(Continuous Deployment)
持续部署是指当交付的代码通过评审之后,自动部署到生产环境中。持续部署是持续交付的最高阶段。
这意味着,所有通过了一系列的自动化测试的改动都将自动部署到生产环境。它也可以被称
为“Continuous Release”。

持续集成的优势

  • 快速集成,快速反馈,快速解决
  • 团队信息更强
  • 发布效率更高

架构

CIDI架构流程图

notion image
  1. 用户向 Gitlab 提交代码,代码中必须包含 Dockerfile
  1. 将代码提交到远程仓库
  1. 用户在发布应用时需要填写 git 仓库地址和分支、服务类型、服务名称、资源数量、实例个数,确定后触发 Jenkins 自动构建
  1. Jenkins 的 CI 流水线自动编译代码并打包成 docker 镜像推送到 Harbor 镜像仓库
  1. Jenkins 的 CI 流水线中包括了自定义脚本,根据我们已准备好的 kubernetes 的 YAML 模板,将其中的变量替换成用户输入的选项
  1. 生成应用的 Kubernetes YAML 配置文件
  1. 更新 Ingress 的配置,根据新部署的应用的名称,在 ingress 的配置文件中增加一条路由信息
  1. 更新 PowerDNS,向其中插入一条 DNS 记录,IP 地址是边缘节点的 IP 地址。关于边缘节点,请查看 边缘节点配置
  1. Jenkins 调用 kubernetes 的 API,部署应用

CICD LandSpace

notion image

疑问

BlueOcean和Jenkins区别

BuleOcean是Jenkins的新功能插件,也可以说是新版本
相对于Jenkins增加了更多可视化的功能
官方主推的方式

为什么选择使用Docker来安装Jenkins

最大的特点就是构建环境(比如:后端maven、前端node)可以根据需要引入docker镜像,不需要自己管理基础环境(java、maven、git、node、npm、yarn等),省去安装配置环境时间,可以快速改变构建环境(比如升级环境版本)、支持新语言;

使用方式

目前

目前仅使用Jenkins作为CIDI集成发布工具
开发:使用gitParamPlug插件,选择分支,然后执行构建
正式:使用多分支(正式、UAT、其他)构建后部署不同服务器

未来

1.先使用容器作为生产环境
2.根据需要引入k8s管理容器

操作流程

目标

根据本操作流程,可以避免踩坑,快速构建出适合本公司业务的CIDI平台
实际操作预计时间:预计半天到一天

需要具备知识

  • Docker常见命令(镜像、容器、网络)
  • Linux常见命令(部署命令相关,ssh免密)
  • CIDI作用是流程
  • 文章可以能有一些细节之处没有体现出来,如果一点都不清楚这些知识,很有可能碰到异常后无法处理;简单知道这些即可,不清楚的话也可以继续操作,遇到问题要搜索找答案或者请教别人

注意事项

  1. GitHub配置代理后稳定65kb每秒,偶尔会5MB每秒,不清楚什么情况,按照50k每秒,10分钟35MB,大多数代码超出百兆,这里用git SCM方式设置超时时间为30分钟,如果是页面源码管理方式,需要额外配置超时时间,代理配置找老江(江树源)分配
  1. docker子网,公司使用网段为,需要手动修改docker子网(修改的子网ip要为局域网段,否则ssh连接时候阿里云记录ssh源ip就是docker的子网ip,如果是外网会被识别为异地登陆)
  1. ssh服务器远程路径不能为空,默认也要是 /
  1. proxy两种方式,docker网络host使用主机proxy,或者proxy软件放入容器使用
  1. 部署宿主机方式和部署远程方式相同
  1. piepline的语法

1.安装Docker

2.配置Docker子网

爱用公司内的机器必须配置,和公司内网冲突

3.配置JenkinsBlueOcean挂载目录

主要是为了java存放mavenjar包,自定义setting文件配置
放到/var/jenkins_home/appconfig/maven 下,文件改名为settings.xml

4.安装JenkinsBlueOcean

填写密钥进入管理页面

notion image
进入后选择使用默认推荐的插件安装(email安装失败不用管,很常见)
notion image

5.安装额外插件

如果获取插件失败,百度搜索配置jenkins 插件代理,设置清华源即可
  1. Docker Pipeline docker流水线
  1. Publish Over SSH 远程
  1. git param 参数构建
  1. Environment Injector 凭证管理

6.Proxy Github

trojan-go,安装trojan-go-linux-amd64.zip版本,然后解压放入服务器,go编译后跨平台直接可运行
使用两种方式:
  • 使用docker的--net=host模式,然后去看dockefile打包语法,找到启动项目脚本(我用的blueocean 最新版2022 8月安装的,位置在这里:/usr/local/bin/jenkins.sh),去改启动端口(如果不需要改启动端口跳过 启动命令exce java **** 最后面追加 --httpPort=8081版本,代理软件可以设置开机启动
  • 2给proxy插件放入jenkins容器内启动,顺带还可以在容器中jenkins启动时启动proxy代理软件,在/usr/local/bin/jenkins.sh中增加代理启动命令即可
操作流程
1.下载软件
2.找老江要配置
3.拿到配置后创建config.json文件,给配置放进去
本文以在容器中配置代理为例子:

7.配置SSH密钥

  • 生成ssh公私密钥A机器控制B,A放私钥B放公钥
  • 私钥在Jenkins的系统管理——Publish over SSH——key属性配置上(私钥全文,包括begin和end)
  • 公钥给需要被远程的服务器(可以多台)

8.配置SSH服务器

输入ip和账号,右下角测试一下连接即可,远程目录如果没有就写/(一定要写,不能为空)
notion image

9.配置gitHub

用leader的账号,或者有aiyong仓库团队权限的人的账号生成token
notion image
然后在系统管理、系统配置找到github配置,不要管github地址,直接新增一个secret text凭证,输入个自定义ID,然后填写token,然后选择,看下图即可,配置好右下角测试一下连接,如果超时或其他先进入容器,把git代理挂到1081端口(注意参考下面团)
notion image
notion image
新建项目scm这种需要配置

10创建项目

1.jenkins首页左上角新建任务,根据需要选择多分支或者是流水线
  • 多分支
  • 直接填写github仓库地址,选择github密钥测试连接通过,然后配置高级超时时间,方法和下面的流水线scm方式相同,都是新增属性选择高级,然后填写超时时间;
  • 多分支扫描到新分支会自动构建,需要在配置中设置“不通过SCM自动化触发
  • 原理就是扫描每个分支的jenkinsfile文件(注意名称,要和jenkins提示的jenkinsfile名称相同,我这个名称不一定准确,要看人给的提示标准),如果存在加入到多分支里面
  • 流水线可以选择script和scm两种方式
  • script直接在下面写流水线(我用的就是这个,在demo中get code的时候就可以看到,参考这个即可)
  • scm配置git地址,写一个分支和文件名称,用git仓库管理
  • 以上两种方式,script脚本中用scm方式拉取代码,记得配置超时时间
  • scm方式选择后增加额外属性高级的克隆行为,配置超时时间,如果看不到,是因为屏幕问题,把浏览器上面放点,这样新增下拉回谈到上面,可以触碰到下滑,然后看到高级的克隆行为
notion image
notion image
notion image

11pipeline中根据不同分支构建

多分支项目原理说过了这里说流水线切换分支构建
利用git param插件
在项目设置中勾选参数化构建

12凭证管理以及使用

在凭证中增加凭证,假设使用secret text,输入Id和值即可,值不可查看,在shell中打印也是***
然后就是使用,参考多分枝构建java后端模版1.在环境变种设置 2.使用

13piepline部分语法

这块主要是在sshPublisher中使用的

前言

Jenkins pipeline的单引号、双引号和转义字符的语法和Linux shell中的语法一致。

单引号’

在单引号之间的所有特殊字符都失去了特殊含义

双引号"

在双引号之间的绝大多数特殊字符都失去了特殊含义,除了以下特例:
$ 美元号用来提取变量的值` 反冒号用执行命令\ 反斜杠用来转义字符

多行

‘’‘ ‘’‘
“”“ ”“”

编写脚本

流水线(git param参数化切换分支构建)

java后端模版

node前端模版

多分枝构建

java后端模版

node前端模版

上一篇
clash 防止规则覆盖
下一篇
jenkins docker 容器配置 proxy
Loading...
文章列表
王小扬博客
产品
Think
Git
软件开发
计算机网络
CI
DB
设计
缓存
Docker
Node
操作系统
Java
大前端
Nestjs
其他
PHP