前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ops自动化

ops自动化

原创
作者头像
用户1348170
修改2021-07-09 17:51:52
8650
修改2021-07-09 17:51:52
举报
文章被收录于专栏:52test52test

四.jenkins

有了监控后,我们就可以进行下一步操作:将所有项目的打包工作交给jenkins。当然,现实中是逐步实现的,并不是一步到位的。

首先要有Jenkins。搭建Jenkins同样有现成的Ansible playbook :ansible-role-jenkins ( https : llgithub.com/geerlingguylansible-role-jenkins )。注意,网上的大多文章告诉你的都是Jenkins需要手动安装插件,而我们使用的ansible-role-jenkins实现了自动安装插件,只需要增加一个配置变量jenkins plugins就可以了。官方例子如下:

代码语言:javascript
复制
---
- hosts: all
  vars:
    jenkins_plugins:
      - blueocean
      - ghprb
      - greenballs
      - workflow-aggregator
    jenkins_plugins_timeout: 120

pre_tasks:
  - include_tasks: java-8.yml

roles:
  - geerlingguy.java
  - ansible-role-jenkins

搭建好Jenkins后,就要集成Gitlab了。我们原来就有GitLab,所以不需要重新搭建。

现在我们需要告诉Jenkins如何对业务代码进行编译打包。我们逐步在每个业务系统的根目录中加入相应的Jenkinsfile。在为每个业务系统写Jenkinsfile的过程中,注意这些业务系统的Jenkinsfile的共性,及时进行抽象,避免大量重复。

提示:如果这些业务系统能标准化目录结构,那么Jenkinsfile及部署脚本将会简化很多。所以,笔者在实施自动化过程中,逐渐对所有业务系统的目录结构进行标准化。

采用Jenkins进行自动化编译打包后,我们遇到的第一个问题就是将打包出来的制品放在哪里。所以,在搭建好Jenkins后,就需要搭建Nexus了。

之前我们是在程序员的电脑中执行Ansible的,现在要把这项工作交给Jenkins。具体操作在第12章中详细介绍过,这里就不重复了。

不过,这里有一个问题需要考虑:是将Ansible脚本和业务系统放在同一个代码仓库中,还是分别放在不同的仓库中?

笔者推荐将部署脚本与业务系统放在同一个代码仓库中,结构如下:

这样做的好处是︰

  • 职责清晰。Jenkinsfile负责构建逻辑,deploy目录负责部署逻辑。
  • 标准化。所有需要部署的业务系统都可以使用此目录结构,而不论是Go项目还是Node.js项目。
  • 有助于推行DevOps。开发人员对构建逻辑和部署逻辑负责。虽然推行DevOps只是手段,不是目的。

四.ChatOps

2013年,ChatOps 由GitHub工程师Jesse Newland提出。表面上,ChatOps就是在一个聊天窗口中发送一个命令给运维机器人bot,然后bot执行预定义的操作,并返回执行结果。

笔者认为,ChatOps更深层次的意义在于将重复性的手动运维工作自动化了,开发人员、运维人员可以自助实施一些简单的运维。

ChatOps并不是由一个系统实现的,而是多个系统的集成。我们选择Rocket.Chat作为聊天窗口的实现、Hubot作为运维机器人、Jenkins实现任务的执行

我们通过Rocket.Chat客户端向Rocket.Chat服务端发送消息。

Rocket.Chat

Rocket.Chat ( https : llgithub.com/RocketChat/Rocket.Chat )是一个开源的即时聊天平台,是Slack的开源替代解决方案。它的客户端是跨平台的,可以满足团队里不同人群的需要。

关于搭建Rocket.Chat的过程,官方文档写得非常详细,这里不再叙述。搭建完成Rocket.Chat后,首先需要添加一个机器人用户

Hubot

Hubot ( https : l/hubot.github.com/)是GitHub出品的一个运维机器人程序。其本质上就是一个接收命令消息,执行预定义操作的程序。接收命令消息的组件在Hubot中被称为adapter。

我们希望Hubot接收来自Rocket.Chat聊天窗口中的消息,所以就需要为Hubot安装一个Rocket.Chat的adapter。

在Hubot官方网站中还有很多其他adapter ( https : llhubot.github.com/docsladapters/ ),在开发自己的adapter前,可以先查一下看是否已经有人实现了。

那么,当Hubot接收到命令消息后,怎么知道执行哪些操作呢?这部分就是我们的工作了。实际上就是通过写Coffescript脚本匹配adapter组件传过来的消息,然后执行操作的。这些脚本在Hubot中被称为scripts。

实际上scripts就是通过正则表达式匹配命令消息,然后执行业务逻辑的。以下是一段scripts。

代码语言:javascript
复制
robot.respond /open the (.*) doors/i, (res) ->
    doorType = res.match[1]
    if doorType is "pod bay"
        res.reply "im afraid i can't let you do that."
    else
        res.reply "Opening #{doorType} doors"

安装完成Hubot后,再设置Rocket.Chat adapter所需的一些环境变量。

代码语言:javascript
复制
export ROCKETCHAT_URL=http://1.1.1.1:3000
export ROCKETCHAT_USER=jenkinsbot
export ROCKETCHAT_PASSWRD=123456
# Hubot将要加入的房间
export ROCKETCHAT_ROOM=general
export ROCKETCHAT_USE_SSL=false

接下来,运行bin/hubot-a rocketchat命令启动Hubot 当Hubot启动后,Rocket.Chat的general房间就会显示jenkinsbot加入房间的消息。

Hubot与Jenkins集成

Rocket.Chat与Hubot集成成功后,我们就可以在聊天窗口中@机器人,Hubot机器人就会收到消息内容。

希望收到后执行Jenkins任务。查一查是否已经有人实现了。如果有人,则通过npm search hubot-scripts jenkins搜索与Jenkins相关的scripts。 从列表中选择最近更新过的hubot-jenkins-enhanced 安装方式很简单,在Hubot所在机器上执行npm install–save hubot-jenkins-enhanced命令即可。

接下来,设置hubot-jenkins-enhanced所需的环境变量。

代码语言:javascript
复制
export HUBOT_JENKINS_URL=http://1.1.1.1:8667
export HUBOT_JENKINS_AUTH=admin:23424242asdaada

HUBOT_JENKINS_AUTH变量值的格式为“username : access-token”。其中access-token可以在Jenkins的个人设置页面( /user/configure )中找到

重启Hubot后,我们向Hubot发送一个help指令,看看它支持哪些命令。 hubot-jenkins-enhanced scripts支持很多Jenkins命令。由于篇幅有限,这里只以发起一次构建为例。

命令列表

发起一次构建

Jenkins推送消息到Rocket.Chat

当Jenkins pipeline完成时,可以将结果推送到Rocket.Chat中。rocketchatnotifier插件。提供了此功能。

安装插件后,进入Manage Jenkins-》Configure System页面,找到Global RocketChat Notifier Settings部分。

配置项非常简单,这里就不一一介绍了。 我们尝试在pipeline中发送一条消息

代码语言:javascript
复制
rocketSend channel: 'general',emoji: ':sob:', message: "Build Started - ${env.JOB_NAME} ${env.BUILD_NUMBER} (<${env.BUILD_URL}|Open>)"

在Rocket.Chat的general房间可以看到消息

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 四.jenkins化
  • 四.ChatOps
    • Rocket.Chat
      • Hubot
        • Hubot与Jenkins集成
          • Jenkins推送消息到Rocket.Chat
          相关产品与服务
          CODING DevOps
          CODING DevOps 一站式研发管理平台,包括代码托管、项目管理、测试管理、持续集成、制品库等多款产品和服务,涵盖软件开发从构想到交付的一切所需,使研发团队在云端高效协同,实践敏捷开发与 DevOps,提升软件交付质量与速度。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档