软件 查看点云中点的坐标值
有效实施后,持续交付(CD)会遵循传统运维团队之间的DevOps合作哲学:开发和运营。 CD是构建,部署,测试和发布过程的自动化实现。 使用CD,软件始终处于可释放状态。 在对软件系统的任何部分(基础结构,应用程序代码,配置或数据)进行任何更改时,候选发布版本都会通过交付管道 ,在该管道中创建软件,构建环境,构建数据库,运行测试并创建软件。部署。 许多工具组成了一个平台,能够沿着该管道移动软件系统。
本文介绍了Stelligent开发的CD开源平台OpenDelivery。 OpenDelivery结合了开源工具,云基础架构和脚本。 它支持整个软件系统是代码的概念。 这些脚本均在GitHub版本控制存储库中进行版本控制。 OpenDelivery使用表1中列出的众多工具来创建平台,并支持Linux™上的Rails,Grails和Java™开发。 在本文中,我将描述运行平台,使用交付管道以及运行作业以供应环境和部署应用程序的基本步骤。
表1. OpenDelivery平台使用的工具
工具 | 描述 |
---|---|
亚马逊网络服务(AWS)CloudFormation | OpenDelivery使用CloudFormation(一种用于描述AWS资源配置的模板语言)来实现Jenkins环境的完整基础架构自动化以及针对目标环境的AWS资源配置。 |
Amazon Elastic Compute Cloud(EC2) | OpenDelivery将EC2用于其所有计算实例。 |
亚马逊CloudWatch | OpenDelivery使用CloudWatch监视一些基本性能指标,并在超过阈值时发送简单通知服务(SNS)通知。 |
亚马逊53号公路 | 路由53是一个高度可用且可扩展的DNS,OpenDelivery用来根据用户首选项将域设置为端点。 |
亚马逊SimpleDB | SimpleDB是NoSQL数据库,具有高度可用性和可伸缩性。 OpenDelivery使用它来存储管道配置,例如IP地址和CloudFormation堆栈名称。 |
亚马逊简单通知服务(SNS) | OpenDelivery在创建环境时使用SNS发送消息。 |
亚马逊简单存储服务(S3) | OpenDelivery使用S3来存储平台使用的临时文件。 |
Capistrano | Capistrano是OpenDelivery用于将应用程序部署到环境的基于Ruby的特定于部署的DSL。 |
的GitHub | GitHub托管OpenDelivery源代码。 OpenDelivery的用户还必须将GitHub帐户用于其应用程序代码。 |
詹金斯 | Jenkins是持续集成(CI)服务器。 OpenDelivery使用Jenkins作为其平台,以运行应用程序代码,配置,数据和基础结构更改的所有构建和部署。 |
木偶 | Puppet是具有自己的特定于域的语言(DSL)的基础结构自动化工具。 目标环境的所有基础架构自动化均由Puppet编写,并由CloudFormation调用。 |
Ruby | 自动化管道的大多数脚本都是用Ruby编写的。 |
先决条件
成功安装OpenDelivery平台的三个先决条件是:
- CloudFormation :注册AWS CloudFormation以获得对OpenDelivery使用的所有必需服务的访问权。
- GitHub :您必须具有GitHub帐户。 免费注册GitHub。
- 路线53 :您需要在路线53中为您拥有的域设置托管区域。 此域将在您的OpenDelivery脚本中使用,以解决作为平台一部分创建的资源。
请参阅相关信息的链接,该OpenDelivery快速入门指南。 请注意,在使用OpenDelivery时,将向您收取AWS使用费。
设置持续集成平台
为您的项目设置OpenDelivery CD平台的第一步是在AWS中配置Jenkins CI服务器。 首先, 运行 CloudFormation设置模板。 系统将提示您输入以下参数:
- ApplicationName :您正在创建的Jenkins CI环境的CNAME前缀。 例如http:// ApplicationName .domainname.com。
- GithubUsername :您的GitHub用户名。
- ProjectName :您的GitHub项目的名称。 例如,如果我项目的GitHub URL是https://github.com/stelligent/continuous_delivery_open_platform,则我的ProjectName是Continuous_delivery_open_platform。
- 电子邮件 :您要发送消息的电子邮件地址。
- HostedZone :您拥有的域名,并已在Route 53中为其创建了托管区域。
- GithubOrganization :您的GitHub组织的名称。 例如,如果我项目的GitHub URL是https://github.com/stelligent/continuous_delivery_open_platform,则我的GithubOrganization就是智能的。
- GithubPassword :您的GithubOrganization和ProjectName的GitHub密码。
- KeyName :您的EC2密钥对的名称。 不要包含任何文件后缀。
- InstanceType :EC2实例类型。 如果不确定,请使用默认值。
完成向导后,平台将花费大约20分钟的时间来构建。 构建完成后,转到CloudFormation控制台,然后选中名称旁边为jenkinsstack的堆栈旁边的复选框。 然后,单击输出选项卡。 复制Domain键行中的值,然后在Web浏览器中输入该值,以启动在AWS中运行的新创建的Jenkins CI服务器。 您将看到初始的Jenkins配置,如图1所示:
图1.使用CloudFormation进行配置后的初始Jenkins配置
CD管道
借助OpenDelivery,提供了开箱即用的标准交付管道。 它按顺序运行StartDeliveryPipeline,Build,CreateTargetEnvironment和DeployApplication Jenkins作业。 如果这些作业中的任何一个失败,则管道将失败,并且不会部署软件。
如图2所示,Jenkins表示了一个交付管道的示例:
图2. Jenkins CI服务器中所示的交付管道
在图2中 ,软件经历了三个阶段。 首先,在通过CI流程运行构建后,Jenkins使用StartDeliveryPipeline作业运行所有必需的设置。 然后,它使用CreateTargetEnvironment作业创建目标环境。 最后,如DeployApplication作业所示,它将应用程序部署到目标环境中。 这三个阶段作为一个工作单元运行,其中,如果任何作业失败,则管道也会失败。
通过建立这样的交付管道,您将评估风险的候选发布者(随着越来越多的自动化流程的发生),软件所经历的管道中的每个步骤。 这意味着一旦成功完成管道,如果企业选择这样做,则可能将候选发布版本发布到生产中。 您还可以配置管道以部署到生产环境。
设置目标环境
在OpenDelivery平台的上下文中, 环境被定义为EC2实例上的操作系统以及其他已调配的资源(例如安全组,域配置和存储)。 部署环境后,即可将软件部署到该环境。 Jenkins作业(主要负责运行创建这些环境的脚本)是CreateTargetEnvironment作业。
OpenDelivery中的交付管道通过调用CloudFormation模板从头开始创建环境。 该模板执行Puppet脚本(调用puppet apply
)。 (有关Puppet的更多信息,请参阅“ 敏捷DevOps:基础结构自动化” 。)
清单1显示了CloudFormation模板中调用Puppet的部分:
清单1.调用Puppet的production.template的CloudFormation片段
"# Install Ruby 1.9.3\n",
"rpm -Uvh /tmp/ruby-1.9.3p0-2.amzn1.x86_64.rpm\n",
"# Install Puppet 3.0.1 from Rubygem\n",
"gem install puppet --no-rdoc --no-ri\n",
"groupadd puppet\n",
"# Run Puppet\n",
"puppet apply --modulepath=/home/ec2-user/modules /home/ec2-user/manifests/site.pp\n",
...
OpenDelivery在其GitHub存储库中提供了这些脚本。 您可以更改基础结构中使用的服务器和配置的标准脚本。
运行部署
自动化部署在Capistrano中运行。 您可以使用Capistrano部署到多种类型的开发和OS平台。 这些部署是从Jenkins作业运行到在上一节中描述的CloudFormation和Puppet脚本创建的环境中。 负责运行运行部署的脚本的Jenkins作业是DeployApplication作业。
清单2中的代码片段显示了一个Capistrano脚本,该脚本运行preconfigure
和deploy
任务:
清单2. deploy.rb中的Capistrano代码段可重置环境并运行部署
task :preconfigure do
run "cd #{deploy_to} && sudo rm -rf #{deploy_to}/#{artifact_name}"
config_content = from_template("config/templates/s3_download.erb")
put config_content, "/home/ec2-user/s3_download.rb"
run "sudo chmod 655 /home/ec2-user/s3_download.rb"
end
task :deploy do
run "sudo ruby /home/ec2-user/s3_download.rb --outputdirectory #{deploy_to}/ \
--bucket #{s3_bucket} --key #{artifact}"
case
when language == "rails"
run "cd #{deploy_to} && sudo tar -zxf #{artifact}"
run "sudo chown -R ec2-user:ec2-user #{deploy_to}/#{artifact_name}"
end
end
...
case
when language == "rails"
after "preconfigure", "deploy", "database:configuration", "stripe:initializer", \
"bundler:install", "database:migration", "virtualhost:configuration", \
"whenever:set", "postconfigure", "restart"
您将在OpenDelivery GitHub存储库中名为Deployment的目录的子目录中找到其他Capistrano配方。 在清单2中 ,这些配方的示例是stripe
(stripe.rb)和virtualhost
(virtualhost.rb)。 您可以根据部署需求添加,修改或删除配方。
持续测试
OpenDelivery平台包括针对基础结构(CI和目标环境)和部署运行的基本Cucumber验收测试。 每当将更改应用于分别提供环境或运行CreateTargetEnvironment和DeployApplication作业的脚本时,这些测试就会运行。 清单3中的示例来自OpenDelivery平台中的Cucumber脚本,该脚本验证某些服务器组件是否已安装且可运行:
清单3. OpenDelivery(production.feature)中的Cucumber脚本的片段,该脚本针对环境运行自动化测试
Feature: Scripted Provisioning of Target Environment
As a Developer
I would like my target environment provisioned correctly
so I can deploy applications to it
Background:
Given I am sshed into the environment
Scenario: Is the proper version of Postgresql installed?
When I run "/usr/bin/postgres --version"
Then I should see "8.4"
Scenario: Is the proper version of Apache installed?
When I run "/usr/sbin/httpd -v"
Then I should see "2.2"
...
您可以修改或扩展提供的测试以测试更多环境或部署配置。
进行每项更改都可以构建,部署,测试和发布
在本文中,您了解了OpenDelivery如何利用开源工具和配置为云中的连续软件交付创建平台,以及如何利用该平台。 持续交付最适合一起工作的开发和运营团队。 下一部分将讨论如何打破部门孤岛并创建跨职能的DevOps团队。
翻译自: https://www.ibm.com/developerworks/java/library/a-devops8/index.html
软件 查看点云中点的坐标值