🗒️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架构流程图
- 用户向 Gitlab 提交代码,代码中必须包含
Dockerfile
- 将代码提交到远程仓库
- 用户在发布应用时需要填写 git 仓库地址和分支、服务类型、服务名称、资源数量、实例个数,确定后触发 Jenkins 自动构建
- Jenkins 的 CI 流水线自动编译代码并打包成 docker 镜像推送到 Harbor 镜像仓库
- Jenkins 的 CI 流水线中包括了自定义脚本,根据我们已准备好的 kubernetes 的 YAML 模板,将其中的变量替换成用户输入的选项
- 生成应用的 Kubernetes YAML 配置文件
- 更新 Ingress 的配置,根据新部署的应用的名称,在 ingress 的配置文件中增加一条路由信息
- 更新 PowerDNS,向其中插入一条 DNS 记录,IP 地址是边缘节点的 IP 地址。关于边缘节点,请查看 边缘节点配置
- Jenkins 调用 kubernetes 的 API,部署应用
CICD LandSpace
疑问
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作用是流程
- 文章可以能有一些细节之处没有体现出来,如果一点都不清楚这些知识,很有可能碰到异常后无法处理;简单知道这些即可,不清楚的话也可以继续操作,遇到问题要搜索找答案或者请教别人
注意事项
- GitHub配置代理后稳定65kb每秒,偶尔会5MB每秒,不清楚什么情况,按照50k每秒,10分钟35MB,大多数代码超出百兆,这里用git SCM方式设置超时时间为30分钟,如果是页面源码管理方式,需要额外配置超时时间,代理配置找老江(江树源)分配
- docker子网,公司使用网段为,需要手动修改docker子网(修改的子网ip要为局域网段,否则ssh连接时候阿里云记录ssh源ip就是docker的子网ip,如果是外网会被识别为异地登陆)
- ssh服务器远程路径不能为空,默认也要是 /
- proxy两种方式,docker网络host使用主机proxy,或者proxy软件放入容器使用
- 部署宿主机方式和部署远程方式相同
- piepline的语法
1.安装Docker
2.配置Docker子网
爱用公司内的机器必须配置,和公司内网冲突
3.配置JenkinsBlueOcean挂载目录
主要是为了java存放mavenjar包,自定义setting文件配置
放到/var/jenkins_home/appconfig/maven 下,文件改名为settings.xml
4.安装JenkinsBlueOcean
填写密钥进入管理页面
进入后选择使用默认推荐的插件安装(email安装失败不用管,很常见)
5.安装额外插件
如果获取插件失败,百度搜索配置jenkins 插件代理,设置清华源即可
- Docker Pipeline docker流水线
- Publish Over SSH 远程
- git param 参数构建
- 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和账号,右下角测试一下连接即可,远程目录如果没有就写/(一定要写,不能为空)
9.配置gitHub
用leader的账号,或者有aiyong仓库团队权限的人的账号生成token
然后在系统管理、系统配置找到github配置,不要管github地址,直接新增一个secret text凭证,输入个自定义ID,然后填写token,然后选择,看下图即可,配置好右下角测试一下连接,如果超时或其他先进入容器,把git代理挂到1081端口(注意参考下面团)
新建项目scm这种需要配置
10创建项目
1.jenkins首页左上角新建任务,根据需要选择多分支或者是流水线
- 多分支
- 直接填写github仓库地址,选择github密钥测试连接通过,然后配置高级超时时间,方法和下面的流水线scm方式相同,都是新增属性选择高级,然后填写超时时间;
- 多分支扫描到新分支会自动构建,需要在配置中设置“不通过SCM自动化触发”
- 原理就是扫描每个分支的jenkinsfile文件(注意名称,要和jenkins提示的jenkinsfile名称相同,我这个名称不一定准确,要看人给的提示标准),如果存在加入到多分支里面
- 流水线可以选择script和scm两种方式
- script直接在下面写流水线(我用的就是这个,在demo中get code的时候就可以看到,参考这个即可)
- scm配置git地址,写一个分支和文件名称,用git仓库管理
- 以上两种方式,script脚本中用scm方式拉取代码,记得配置超时时间
- scm方式选择后增加额外属性高级的克隆行为,配置超时时间,如果看不到,是因为屏幕问题,把浏览器上面放点,这样新增下拉回谈到上面,可以触碰到下滑,然后看到高级的克隆行为
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...