设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 数据 手机
当前位置: 首页 > 教程 > 正文

小团队如何从零搭建一个自动化运维体系?(2)

发布时间:2018-07-04 07:15 所属栏目:61 来源:翟志军
导读:现在我们需要告诉 Jenkins 如何对我们的业务代码进行编译打包,有两种方法: 界面上设置 使用 Jenkinsfile:类似于 Dockerfile 的一种文本文件,具体介绍:Using a Jenkinsfile[7] 我毫不犹豫地选择了第二种,因为

  现在我们需要告诉 Jenkins 如何对我们的业务代码进行编译打包,有两种方法:

  小团队如何从零搭建一个自动化运维体系?

  界面上设置

  使用 Jenkinsfile:类似于 Dockerfile 的一种文本文件,具体介绍:Using a Jenkinsfile[7]

  我毫不犹豫地选择了第二种,因为一是利于版本化;二是灵活。

  Jenkinsfile 类似这样:

  pipeline { agent any stages { stage('Build') { steps { sh './gradlew clean build' archiveArtifacts artifacts: '**/target/*.jar', fingerprint: true } } } }

  那么 Jenkinsfile 放哪里呢?答案是和业务代码放在一起,类似这样每个工程各自管理自己的 Jenkinsfile:

  小团队如何从零搭建一个自动化运维体系?

  这时,我们就可以在 Jenkins 上创建一个 pipleline Job了。关于分支管理,我们人少,所以,建议所有项目统一在 master 分支进行开发并发布。

  让 Jenkins 帮助我们执行 Ansible

  之前我们都是在程序员的电脑执行 Ansible 的,现在我们要把这项工作交给 Jenkins。

  具体操作:

  在 Jenkins 安装 Ansible 插件[8]

  在 Jenkinsfile 中执行

  withCredentials([sshUserPrivateKey(keyFileVariable:"deploy_private",credentialsId:"deploy"),file(credentialsId: 'vault_password', variable: 'vault_password')]) { ansiblePlaybook vaultCredentialsId: 'vault_password', inventory: "environments/prod", playbook: "playbook.yaml", extraVars:[ ansible_ssh_private_key_file: [value: "${deploy_private}", hidden: true], build_number: [value: "${params.build_number}", hidden: false] ] }

  这里需要解释下:

  ansiblePlaybook 是 Jenkins ansible 插件提供的 pipeline 语法,类似手工执行:ansible-playbook 。

  withCredentials 是 Credentials Binding[9] 插件的语法,用于引用一些敏感信息,比如执行 Ansible 时需要的 ssh key 及 Ansible Vault 密码。

  一些敏感配置变量,我们使用 Ansible Vault[10] 技术加密。

  Ansible 脚本应该放哪?

  我们已经知道各个项目各自负责自己的自动化构建,所以 Jenkinfile 就放到各自项目中。

  那项目的部署呢?同样的道理,我们觉得也应该由各个项目自行负责,所以我们的每个要进行部署的项目下都会有一个 Ansible 目录,用于存放 Ansible 脚本。

  类似这样:

  小团队如何从零搭建一个自动化运维体系?

  但是,怎么用呢?我们会在打包阶段将 Ansible 目录进行 zip 打包,到真正部署时,再解压执行里面的 playbook。

  快速为所有的项目生成 Ansible 脚本及Jenkinsfile

  上面,我们将一个项目进行 Jenkins 化和 Ansible 化,但是我们还有很多项目需要进行同样的动作。

  考虑到这是体力活,而且以后我们还会经常做这样事,所以我决定使用 cookiecutter[11] 技术自动生成 Jenkinsfile 及 Ansible 脚本,创建一个项目,像这样:

  小团队如何从零搭建一个自动化运维体系?

  小结

  总结下来,我们小团队的自动化运维实施的顺序大概为:

  上基础监控

  上 Gitlab

  上 Jenkins,并集成 Gitlab

  使用 Jenkins 实现自动编译打包

  使用 Jenkins 执行 Ansible

  以上只是一个架子,基于这个“架子”,就可以向那些大厂高大上的架构进行演进了,比如:

  CMDB 的建设:我们使用 ansible-cmdb[12] 根据 inventory 自动生成当前所有机器的情况。

  发布管理:Jenkins 上可以对发布的每个阶段进行定制。蓝绿发布等发布方式可以通过修改 Ansible 脚本和 Inventory 实现。

  自动扩缩容:通过配置 Prometheus 告警规则,调用相应 webhook 就可以实现。

  ChatOps:ChatOps 实战[13]。

  以上就是我关于自动化运维的一些实践,但是还在演进的路上,希望能与大家交流。

  相关链接:

  [1]https://github.com/prometheus/node_exporter

  [2]https://github.com/ernestas-poskus/ansible-prometheus

  [3]https://github.com/timonwong/prometheus-webhook-dingtalk

  [4]https://www.digitalocean.com/community/tutorials/how-to-manage-multistage-environments-with-ansible

  [5]http://docs.ansible.com/ansible/latest/modules/consul_module.html

  [6]https://github.com/geerlingguy/ansible-role-jenkins

  [7]https://jenkins.io/doc/book/pipeline/jenkinsfile/

  [8]https://wiki.jenkins.io/display/JENKINS/Ansible+Plugin

  [9]https://jenkins.io/doc/pipeline/steps/credentials-binding/

  [10]http://docs.ansible.com/ansible/2.5/user_guide/vault.html

  [11]https://github.com/audreyr/cookiecutter

  [12]https://github.com/fboender/ansible-cmdb

  [13]https://showme.codes/2017-10-08/chatops-in-action/

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读