您的位置:首页 > 运维架构

DevOps实践集——应用运维之持续部署

2017-09-01 17:32 931 查看
DevOps实践集——应用运维之持续部署

[align=left]1. 场景[/align]
[align=left]持续部署:业界没有统一明确地定义,简单理解为将集成结果部署到不同的环境供用户使用,并且立即反馈部署结果的实践,其中不同的环境包括:开发环境、测试环境、预发布环境、生产环境[/align]
[align=left]持续部署两个核心要素:持续、自动化,自动化是持续的基础[/align]
[align=left]持续部署的需求场景:[/align]

需要频繁的发布更新

部署规模较大,人工操作费时费力易出错

规范化上线部署流程和配置规范

[align=left]注:此处只讨论应用部署,不包括系统部署[/align]
[align=left]2. 实践[/align]



开发提交代码到Git仓库

自动或手动触发持续集成,执行编译、打包、单元测试、代码扫描等过程,并构建出可部署的程序文件,上传测试的SVN库

测试人员手动触发Jenkins调用Rundeck从测试的SVN库中获取部署文件并部署到测试环境

测试人员进行产品验证

测试人员在验证通过后,申请发布到生产环境,并手动触发Jenkins,将测试的SVN库中的部署文件上传到运维的SVN库

运维人员触发Rundeck,从运维的SVN库中获取部署文件并更新到生产环境

[align=left]注:[/align]

集群的部署采用分步更新,先发布到线上集群里的某一个节点进行更新测试,测试通过后把这个节点加入集群,再更新其他节点

发布成果的版本采用时间戳的形式

[align=left]3. 工具[/align]
[align=left]3.1 工具箱[/align]

Jenkins:用作发布任务的触发,实现发布的持续化

SVN:发布成果的版本管理工具,实现发布内容的可追踪、易回滚

Rundeck:用Java/Grails实现的开源自动化部署工具,帮助用户在数据中心或者云环境中自动化各种操作和流程。通过命令行或者web界面,用户可以对任意数量的服务器进行远程操作,大大降低了对服务器自动化的门槛。

[align=left]3.2 Rundeck功能[/align]

提供Web界面和命令行来执行shell命令和job

工作流,自定义job步骤

设置shell命令/job运行周期(类似cron table的功能)

用户权限控制,支持LDAP/ActiveDirectory

保存历史日志

提供Web API

[align=left]通过以上功能,Rundeck可以在任意数量的服务器上批量执行不同的任务,降低对自动化的部署、执行、维护的工作难度。[/align]
[align=left]3.3 Rundeck架构[/align]



[align=left]3.4 Rundeck典型使用场景[/align]

标准化服务器操作过程

通过Rundeck定义日常标准的服务器操作过程,对服务器的操作通过Rundeck进行,便于权限控制、可视化与审计



任务调度

通过Rundeck实现任务的自动调度



自动化部署

通过持续集成系统调用Rundeck实现不同环境的自动化部署和部署验证



自助化测试环境

通过Rundeck可以为开发和测试提供自助化的测试环境,很方便基于不同版本的构件进行部署



基于Rundeck的API和插件机制构建运维平台



[align=left]3.5 Rundeck安装配置[/align]
[align=left]1. 安装[/align]
首先确认已经安装了jdk

<span class="s1" style="font-family: 微软雅黑; line-height: 1.5;"> rpm -Uvh http://repo.rundeck.org/latest.rpm </span>

<span style="font-family: 微软雅黑; line-height: 1.5;">yum install rundec</span><span style="font-family: 微软雅黑; line-height: 1.5; background-color: rgb(255, 255, 255);">k</span>

复制代码
2.配置

在mysql数据库创建数据库rundeck,和对rundeck有所有权限的用户rundeckuse/rundeckpassword

修改文件/etc/rundeck/rundeck-config.properties文件:

<span style="font-family: 微软雅黑; line-height: 1.5;"> grails.serverURL=http://该服务器IP地址:4440</span>

<span style="font-family: 微软雅黑; line-height: 1.5;">dataSource.dbCreate = update</span>

<span style="font-family: 微软雅黑; line-height: 1.5;">dataSource.url=jdbc:mysql://ip/rundeck?autoReconnect=true&useUnicode=yes&characterEncoding=UTF8</span>

<span style="font-family: 微软雅黑; line-height: 1.5;">dataSource.username = rundeckuser</span>

<span style="font-family: 微软雅黑; line-height: 1.5;">dataSource.password = rundeckpass</span><span style="font-family: 微软雅黑; line-height: 1.5; background-color: rgb(255, 255, 255);">word</span>

复制代码
启动rundeck

service rundeck start

复制代码

[align=left]4. 效果[/align]

提升应用变更效率,包括速率和成功率

实现部署自助化,开发、测试均可完成相应环境的发布

[align=left]5. 其他[/align]
[align=left]5.1 自动化部署工具对比[/align]
[align=left]自动化部署工具种类繁多,各有千秋,根据团队实际需求和工具特性选择适合当前阶段的工具,避免过多追求新特性导致陡峭的学习曲线,避免对当前环境造成过多的侵入,在非生产环境进行充分的验证。下面就常见的自动化部署工具进行简单比较:[/align]
[align=left]工具[/align]
[align=left]开发语言[/align]
[align=left]交互方式[/align]
[align=left]支持OS[/align]
[align=left]有无Agent[/align]
[align=left]发布时间[/align]
[align=left]场景[/align]
[align=left]备注[/align]
[align=left]Puppet[/align]
[align=left]Ruby[/align]
[align=left]Web UI/CLI[/align]
[align=left]Unix/Linux/Windows[/align]
[align=left]有[/align]
[align=left]2005年[/align]
[align=left]基础配置文件管理[/align]
[align=left]配套工具:foreman[/align]
[align=left]Chef[/align]
[align=left]Ruby[/align]
[align=left]Web UI/CLI[/align]
[align=left]Unix/Linux/Windows[/align]
[align=left]有[/align]
[align=left]2009年[/align]
[align=left]基础配置文件管理[/align]
[align=left]Rundeck[/align]
[align=left]Java[/align]
[align=left]Web UI/CLI[/align]
[align=left]Unix/Linux/Windows[/align]
[align=left]无[/align]
[align=left]2010年[/align]
[align=left]代码批量发布[/align]
[align=left]SaltStack[/align]
[align=left]Python[/align]
[align=left]Web UI/CLI[/align]
[align=left]Unix/Linux/Windows[/align]
[align=left]有[/align]
[align=left]2011年[/align]
[align=left]基础配置文件管理[/align]
[align=left]Ansible[/align]
[align=left]Python[/align]
[align=left]Web UI/CLI[/align]
[align=left]Linux/Windows[/align]
[align=left]无[/align]
[align=left]2012年[/align]
[align=left]基础配置文件管理和命令批量操作[/align]
[align=left]Puppet:当前的主流工具,重量级,容易上手,扩展性强,但配置复杂,对管理员要求较高,需具备一定编程能力,[/align]
[align=left]Chef:功能和成熟度稍逊于Puppet,重量级,设计原则是基础设施即代码,专注连接开发与运维[/align]
[align=left]Rundeck:轻量级,WebUI免费[/align]
[align=left]SaltStack:轻量级,有Agent但不是必须使用,采用ssh协议,Web界面功能稍弱,适合运维人员使用,支持去中心化[/align]
[align=left]Ansible:轻量级,采用ssh协议,WebUI收费,支持YAML/JSON,容易上手,扩展性强,注重运维,支持推拉两种模式,擅长应用部署,任务编排[/align]
[align=left]服务器规模非常大,影响文件推送或下拉效率,建议参考Twitter的部署工具Murder,其基于BitTorrent技术实现P2P下载,大大提高了文件推送或下拉效率[/align]
[align=left]5.2 Ansible基本介绍[/align]

简介

Ansible是一款简单的自动化运维工具,重点解决自动化应用部署、自动化配置管理、自动化云服务管理。简单理解Ansible是一款批量的在远程服务器上执行命令的工具,支持Linux各个发行版和Windows系统。Ansible的两种使用方式:Ad-hoc和Playbooks。

工作原理

Ansible会根据命令或者playbook生成shell或者python脚本,并推送到远程服务器上执行,然后自动删除shell,和其他自动化部署工具类似,都是批量的在远程服务器上执行命令。

Ansible支持Push和Pull两种模式,Push即由Ansible管理端推送脚本到远程服务器上执行,Pull则为远程服务器主动到Ansible管理端拉取脚本执行。

Ansible内部使用手册

根据官文档和实战案例编写的内部使用手册,该手册会进行持续更新

[align=left]5.3 其他问题[/align]

为何采用SVN管理上线成果,而不采用Git?

A:上线成果一般为二进制文件,使用Git存储和传输时不会压缩文件,存储资源消耗大,且SVN使用简单,适合成果的版本管理

Rundeck交流QQ群:339569912

Rundeck官方文档

Puppet适合部署操作系统软件,中间件等

使用SVN部署时,不使用svn update命令更新代码,而是使用export方式,避免引入.svn目录

[align=left]同学们,欢迎大家留言讨论,陆续还有更多的湿货+干货,大家回复越多,楼主更新越快[/align]

[align=left]想了解更多运维和DevOps的资讯和实践,关注公众号[/align]



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息