3

DevOps实战2-极简模型

 2 years ago
source link: http://saiya.xyz/2021/01/16/devops2/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

DevOps实战2-极简模型

​ 以实践的方式摸索DevOps。同时也为了技术总结,加深印象。

​ 初期目标是实现push代码后自动在服务器上完成构建与部署,并将代码push操作以及构建结果(成功或失败)的通知发送到钉钉群,实现部分持续集成和持续交付功能。

​ 本此探索是一次初级尝试,尽量简化了架构和操作。在同一台开发服务器上安装docker、jenkins。

  • Gitee:码云,用于存储代码。类似的还有Github、Gitlab、Bucket等。
  • Git:管理代码
  • Jenkins:由Jenkins实现构建等工作。
  • Docker:容器化部署服务
  • Spring boot:实现业务逻辑
  • 钉钉:接收消息的工具软件

devops-1-300x128.png

  1. 开发人员push代码到码云上。
  2. 码云收到push后通过webhook的方式向钉钉发送该push通知。
  3. 码云收到push操作后同样通过webhook方式向触发jenkins的构建任务。
  4. jenkins将构建结果也是用webhook的方式发给钉钉
  5. jenkins调用shell脚本将构建产物部署到jenkins所在的服务器上

程序员通过钉钉接收到上述的消息。

钉钉机器人

  1. 在钉钉上创建一个群,用以接收流程图中2、4步操作的通知消息。

  2. 群设置->智能群助手->添加机器人,选择添加“自定义通过webhook接入”这种机器。

  3. 为了通讯安全,机器人有三种验证方式分别是自定义关键词、加签、IP白名单。自定义关键词意思是发给机器人的消息中要有自定义的关键词,如果没有机器人是拒收的。例如设置了”报警“关键词,发给机器人的消息就必须有含有”报警“俩字。加签就是要求按照钉钉的说明文档,做签名计算,详见https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq。IP白名单,顾名思义,只有来自名单中的IP才接收消息。

  4. 为了简单起见选择IP白名单的方式。从上面流程图可以看出,钉钉要接收码云和jenkins的消息,所以这里设置上码云的ip:58.215.142.64和jenkins所在服务器的IP。

  5. 将webhook那一串复制出来保存后面配置需要用到

    https://oapi.dingtalk.com/robot/send?access_token=c03b4deddc81fac7xxxxxxxa5451b331afc066xxxxxxxxxxxx

  6. 点击确定,完成机器人的创建。

码云配置钉钉机器人Webhook

  1. 在码云上为项目创建代码仓库。从上面的流程图可以看到码云向钉钉与Jenkins发送数据,产生联系。所以需要为钉钉和Jenkins二者分别配置。
  2. 进入项目的管理界面。点击“WebHooks”,点击添加按钮。
  3. 在URL那一项输入前面保存的钉钉机器人完整webhook。webhook密码/签名那一项不用填。点击保存,界面上有测试按钮,可以测试一下是否OK。

Jenkins为码云做的配置

​ 码云触发jenkins的构建任务,和上面类似,为了通讯安全,码云和jenkins都需要配置。

  1. jenkins需要下载安装插件,DingTalk和Dingding-json-pusher,使Jenkins可以向钉钉发消息。
  2. Jenkins需要安装Gitee插件,使Jenkins可以通过webhook方式被码云触发构建。需要设置Gitee APIV5私人令牌什么的,还是挺啰嗦的,但不难。照着码云的文档做就好。下面有说明文档连接。
  3. 在系统管理->系统配置里面,会看见钉钉的相关设置。其中id会自动生成,不用填。名称自己随便起。webhook填写前面保存的钉钉机器人的webhook。点击保存就ok了。
  4. 在构建任务配置中会出现“钉钉配置”需要勾选你刚刚配置的机器人webhook。(我这里没勾选,饶了很多弯路)。
  5. 在构建任务配置中,构建触发器,勾选“Gitee webhook触发构建”,其他选项顾名思义,按实际情况勾选。需要注意的是有一个Gitee WebHook密码,系统自动生成,需要保存下来,配置到码云上。码云就是通过这个密码和Jenkins安全通讯。

详见https://gitee.com/help/articles/4193#article-header10

码云的使用说明,能更详细些。

需要注意的是

跨域请求问题:

由于Jenkins出于安全考虑,为了防止跨站请求伪造(CSRF),对于来自其他网站的网络请求会做过滤。Gitee的webhook是其他的网站请求,会被过滤掉。为了简化处理,关闭Jenkins的CSRF即可。
低版本的Jenkins在系统设置里面关掉CSRF功能即可
高版本的Jenkins需要在设置文件中修改,然后重启Jenkins使修改生效。详见《DevOps实战1-jenkins的安装使用》。

码云配置Jenkins触发构建webhook

  1. 和上面类似,进入码云的webhook界面,点击添加
  2. Url项填写的内容可以在Jenkins的项目构建任务配置中”Gitee 触发构建策略“看到,复制粘贴进去就行。别自己瞎写。
  3. WebHook 密码/签名密钥项选择密码,也是填写在Jenkins的项目构建任务配置中看到的,系统帮忙自动生成的复杂密码。

Jenkins

​ Jenkins收到码云的webhook触发时,启动构建任务。

​ jenkins构建结束后,调用shell脚本,通过shell脚本将服务部署到服务器上。

Jenkins发送构建结果通知

​ 在项目构建设置中增加”构建后操作“,选择Dingding Json Pusher。填写access token即可。需要注意的是这里的access token是前面保存的钉钉机器人webhook中的“access_token=”后面的内容。举例:

https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxx,此处需要填写的是xxxxxxxxxxx这部分


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK