概述
学习如何创建一个 DevOps Services 项目,将代码存储于该项目的 Git 存储库中,以及如何创建一个 Delivery Pipeline ,以便只要您团队的任何人向您的 Git 存储库推送了更改,就会自动部署您应用程序的最新版本。
本教程是 developerWorks 上的 “Bluemix 基础” 教程系列中的一篇文章。
您将在本教程中完成的任务
第 1 步. 下载代码
第 2 步. 创建一个 DevOps Services 项目
第 3 步. 将代码推送到一个 Git 存储库
第 4 步. 配置 Delivery Pipeline
第 5 步. 将更改推送到 Git 存储库来触发 Delivery Pipeline
第 6 步. 观察 Delivery Pipeline
测验
结束语
让我们开始吧。
您在前一篇教程 “ 将一个示例 PHP 应用程序部署到云中 ” 中已经了解到,可以使用 PHP 和 Cloud Foundry 命令行来运行、修改 Web 应用程序,并将其部署到云中。现在您已经知道了如何将应用程序部署到 Bluemix,以便任何人都可以通过网络访问它,您可能还想知道哪些 DevOps 支持可以让您的开发和操作流程变得轻松而又高效。
“ IBM Bluemix DevOps Services 是云上的一个软件即服务 (SaaS),它支持持续交付。借助 DevOps Services,您可以在同一个地方开发、跟踪、计划和部署软件。 ”
完成本教程需要掌握的知识
- 本教程以前一篇教程作为基础,所以您应该完成 “ 将一个示例 PHP 应用程序部署到云中 ”。
完成本教程所需的软件
- 一个 Bluemix 帐户(注册您的 免费试用版帐户 ,如果已经有一个帐户,请 登录到 Bluemix )。
- 在您的计算机上安装以下软件:
- 一个文本编辑器 — 首选具有 PHP 语法突出显示的编辑器,比如 Sublime Text (可使用免费试用版本),也可以使用开源编辑器,比如 Atom 。
- PHP 5.9 或更高版本。
- Git 命令行客户端 2.5.3 或更高版本。
第 1 步. 下载并解压代码
要学习本教程,首先需要下载和解压代码。该代码与来自上一篇教程 的代码相同。
- 单击此按钮下载示例 PHP Web 应用程序 phptutorial2.zip 的代码:
下载示例 PHP Web 应用程序
- 将应用程序解压到您选择的一个工作目录中。
第 2 步. 创建一个 DevOps Services 项目
在一个 DevOps Services 项目中,一个或多个人可以为了实现某个目标而构建、分享、组织和管理资源的版本。通常,该目标是创建一个应用程序。在这一步中,您将创建一个 DevOps Services 项目,该项目包含您的 Git 存储库和 Delivery Pipeline。
- 导航到 DevOps Services 。
- 如果尚未执行身份验证,请使用您的 IBM ID(用于 Bluemix 的相同 ID)进行登录。
- 在 MY PROJECTS 页面上,单击 CREATE PROJECT 。
- 在 Create a project 页面上:
- 为您的项目键入一个名称。
- 单击 Create a new repository 。
- 单击 Create a Git repo on Bluemix 。
- 确保 "Add features for Scrum development" 复选框已选中。
- 确保 "Make this a Bluemix Project" 复选框已选中。
- 选择您想您的应用程序部署到的 Bluemix 地区、组织和空间。
- 单击 CREATE 。
现在已经为您创建了一个 DevOps Services 项目。您可以浏览您的项目,邀请其他人加入您的项目,并更新您项目的图像和描述。
第 3 步. 将代码推送到一个 Git 存储库
将代码存储在源代码控制中心有许多好处,其中包括提供您代码的备份,允许您回滚到以前的版本,使您能够查看代码的历史记录,从而理解为什么执行更改,还使您能够轻松地与队友一起处理同一个代码库。
在本教程中,会将代码存储于托管在 Bluemix 上的一个 Git 存储库中。您将使用 git 命令行客户端来管理与 Git 存储库的连接。如果您喜欢的话,还可以使用另一个适合您的操作系统的工具,比如一个 GUI 工具。
获取您在 DevOps Services 上的存储库的 Git URL
- 在 DevOps Services 上您项目的页面中,单击右上角的齿轮图标来打开项目设置。
- 复制 Git URL。
创建一个本地 Git 存储库
- 将目录更改为代码的根目录。
- 如果尚未设置将与您的代码提交关联的用户名和电子邮件,请设置它们;例如:
git config --global user.name "Sam Cooke"
git config --global user.email "scooke@bluemix.net"
- 初始化本地 Git 存储库。发出命令:
git init
您会看到一条与此消息类似的确认消息:
Initialized empty Git repository in <您的代码目录的路径>
点击查看大图
关闭 [x]
将您的代码提交到本地 Git 存储库
指定应该在源代码控制中心中跟踪哪些文件后,可以将您的更改提交到本地 Git 存储库。
- 将所有项目文件添加到本地 Git 存储库:
git add
。 - 使用 commit comment 将添加的文件提交到本地 Git 存储库:
git commit –m 'initial commit of code'
Git 将列出您提交的所有更改来验证此命令。
点击查看大图
关闭 [x]
设置一个远程存储库引用
您的本地存储库已准备就绪。下一步是设置 DevOps 远程存储库的引用。
- 为远程 DevOps Services Git 存储库添加别名 origin :
git remote add origin <the DevOps project Git URL>
- 确认您已成功添加远程存储库:
git remote –v
您会看到远程存储库引用的列表和它的别名。
点击查看大图
关闭 [x]
将代码推送到 DevOps Services Git 存储库
接下来,将您提交的更改推送到 DevOps Services 上的远程 Git 存储库。
- 将您的代码推送到远程存储库,并在提示时输入您的登录凭证:
git push origin master
这一步将来自本地存储库的主分支上的所有已提交更改推送到 origin (您在 DevOps Services 上的 Git 存储库的别名),并将它们写入到 DevOps Services Git 存储库中。
- 确认您的本地存储库与 DevOps Cit 存储库同步:
git status
状态报告应该显示您的本地存储库是同步的,没有要交到 DevOps 存储库的新内容。
您的项目代码现在已经存储在您的 DevOps Services 项目中的 Git 存储库中。导航到 DevOps Services 并选中您的项目,以查看代码的只读视图。
第 4 步. 配置 Delivery Pipeline
成功的 DevOps 方法的一个要点是拥有自动化的构建和部署功能。幸运的是,DevOps Services 提供了 Delivery Pipeline 服务,您可以配置该服务,通过自动或手动触发方式构建您的应用程序,并将其部署到 Bluemix。
在 Bluemix 中,组织和空间是 Cloud Foundry 基础架构中的组织单元,可用来存储和跟踪应用程序资源。 组织 包含域、空间和用户; 空间 包含应用程序和服务。
在默认情况下,在您首次登录 Bluemix 后,会为您创建一个 dev (开发)空间。在本教程中,可以认为 dev 空间表示一个在具有生产质量的环境中实时测试代码的地方,无需将代码部署到实际生产环境中。(一些人可能将此称为质量保证或测试空间。)在这一步中,您将创建一个名为 prod 的新空间来表示生产空间:用来存放最终用户将要使用的应用程序的地方。
您还将配置 Delivery Pipeline 服务,只要您或您团队中的某人向您项目的 Git 存储库推送了代码,该服务就会构建您的应用程序,并将其部署到您在 Bluemix 中的 dev 和 prod 空间。
点击查看大图
关闭 [x]
创建一个将构建您的应用程序的构建阶段
- 在 DevOps Services 上的项目页面中,单击右上角的 BUILD & DEPLOY 。
- 单击 ADD STAGE 。
- 单击 Stage Configuration 对话框顶部的 MyStage ,通过键入 Build Stage 为您的阶段命名。
- 请注意,Input Type 默认情况下被设置为 “SCM Repository”。此设置意味着该阶段的输入将是您的 Git 存储库。
- 请注意,默认情况下已经选中了 "Run jobs whenever a change is pushed to Git"。此选择意味着只要您或您团队中的某人向您项目的存储库推送了代码,就会自动触发构建阶段。
- 单击 JOBS 打开 Stage Configuration 对话框中的 Jobs 部分。
- 单击 ADD JOB 并选择 Build 。
- 在 Builder Type 下拉列表中,选择 Simple
。本教程中的示例 PHP 应用程序在部署之前不需要任何特殊的构建操作。如果使用更大的 PHP 框架,可能需要在部署之前采用一个自定义构建器来构建应用程序。第 6 步中讨论的 Bluemix PHP buildpack 将直接部署代码。
请注意,将 Working Directory 和 Archive Directory 字段留空,因为此次构建将使用根目录。同样地,保留 Enable Test Report 未选中。
- 另请注意,默认情况下已经选中了 "Stop stage execution on job failure" 复选框。此选择意味着如果发生故障,该管道中的所有后续作业都将停止运行,整个阶段将被标记为失败。
- 单击 SAVE 。
创建一个部署阶段,用它将您的应用程序部署到您在 Bluemix 中的 dev 空间中。
- 单击 ADD STAGE 。
- 单击 Stage Configuration 对话框顶部的 MyStage ,通过键入 Dev Deployment 为您的阶段命名。
- 请注意,Input Type 已经设置为 "Build Artifacts"。此设置意味着上一个阶段中创建的构建工件将是这个阶段的输入。
- 请注意,默认情况下已经选中了 "Run jobs when the previous stage is completed"。此设置将配置您的管道,以便只要有人向您项目的存储库推送了代码,就会运行构建步骤,并在成功构建时启动向开发环境的部署。
- 单击 JOBS 打开 Stage Configuration 对话框中的 Jobs 部分。
- 单击 ADD JOB 并选择 Deploy 。
- 将 Application Name 更改为您的 Bluemix dev 空间的唯一名称。
- 您希望您的应用程序部署到一致的 URL(以便您团队的开发人员可以使用该 URL 测试他们的代码),所以在 Deploy Script 部分的
cf push "${CF_APP}"
的后面,添加:
-n whateverYouWantYourUrlToBe
备注:该 URL 必须在所有 Bluemix 应用程序中是唯一的,所以请发挥您的创造力。
- 单击 SAVE 。
创建一个生产阶段,用它将您的应用程序部署到您在 Bluemix 中的 prod 空间中。
- 单击 ADD STAGE 。
- 单击 Stage Configuration 对话框顶部的 MyStage ,通过键入 Prod Deployment 为您的阶段命名。
- 请注意,Input Type 已经设置为 "Build Artifacts"。此设置意味着构建阶段中创建的构建工件将是这个阶段的输入。
- 请注意,默认情况下已经选中了 "Run jobs when the previous stage is completed"。此设置将配置您的管道,以便在 Dev Deployment 阶段成功完成时运行此阶段。
- 单击 JOBS 打开 Stage Configuration 对话框中的 Jobs 部分。
- 单击 ADD JOB 并选择 Deploy 。
- 在 Space 字段中,选择 Create a new space 。
- 在 Enter space name 字段中,键入 prod 并单击 CREATE 。
- 将 Application Name 更改为您的 Bluemix prod 空间的唯一名称。
- 您希望您的应用程序部署到一致的 URL(以便最终用户可以使用该 URL 访问您的应用程序),所以在 Deploy Script 部分的
cf push "${CF_APP}"
的后面,添加:
-n whateverYouWantYourUrlToBe
备注:请记住,该 URL 必须在所有 Bluemix 应用程序中是唯一的,所以请发挥您的创造力。
- 单击 SAVE 。
您现在已有一个 Delivery Pipeline,它将构建您的应用程序,将您的应用程序部署到 dev 空间,然后将您的应用程序部署到 prod 空间。
第 5 步. 将更改推送到 Git 存储库来触发 Delivery Pipeline
配置 Delivery Pipeline 后,是时候试验一下了!一种方法是单击构建阶段中的播放按钮来手动触发该管道。另一种选择是将一个更改推送到 Git 存储库来触发该管道,这是您将在这一步中采用的方法。
更改代码
您需要做的第一件事是更改一个文件。
- 在文本编辑器中打开 < 您的代码目录 >/views/australia.tpl 文件。
- 向下滚动编辑器,直到看到:
<div id="price">120.00</div>
- 将价格从 120.00 更改为 130.00(需求增加了!)。
- 保存文件。
将您的代码提交到本地 Git 存储库
更改文件后,可以将更改提交到您的本地 Git 存储库,并将它推送到 DevOps Services 上托管的远程 Git 存储库。
- 将目录更改为代码的根目录,添加所有要提交的更改:
git add。
- 提交这些更改和一条注释:
git commit –m 'increased price of print'
- 将更改推送到 DevOps Git 存储库:
git push origin master
请记住,在写入您的 DevOps 存储库之前,系统会提示您进行登录。
第 6 步. 观察 Delivery Pipeline
上一步推送到 DevOps Services 上托管的 Git 存储库的更改自动触发了 Delivery Pipeline。在这一步中,将会分析该管道的结果。可以在管道运行期间查看一些日志和结果。下面的操作说明假设该管道已完成,但也可以在管道运行期间分析它。
- 在 DevOps Services 上的项目页面中,单击右上角的 BUILD & DEPLOY 。
点击查看大图
关闭 [x]
- 在 Build Stage 磁贴中,可以观察到上一个构建作业已成功完成。如果在构建运行时切换到这个 "Pipeline :All Stages" 屏幕,就会看到状态在实时变化。单击 View logs and history
。
在 LOGS 选项卡上,可以看到构建作业的输出。这是一个 Git clone 命令的结果,从 DevOps Git 存储库获取了应用程序的源代码。
点击查看大图
关闭 [x]
- 单击页面顶部的 Back to Pipeline 。
- 在 Dev Deployment 磁贴中,可以观察到已成功部署。单击 View logs and history
。
在 LOGS 选项卡上,可以看到部署的输出。
- 单击页面顶部的 Back to Pipeline 。
- 在 Dev Deployment 磁贴中,可以注意到,您可以单击正在运行的应用程序的 URL 来查看它。还可以查看运行时日志,这在调试问题时很有帮助。
- 浏览生产部署的日志和正在运行的应用程序。
测验
测试您在本教程中学到的知识。答案在下方。
- IBM Bluemix DevOps Services 支持哪种版本控制存储库:
- Git
- Subversion
- Mercurial
- CVS
- Bazaar
- 您如何使用 DevOps Services 管道触发构建?
- 从 DevOps Services 仪表板手动触发
- 只要有人向 DevOps Git 存储库推送代码
- 基于一个可配置的计时器
- b 和 c
- a 和 b
- 组织和空间是 CloudFoundry 中的组织单元。一个空间可包含:
- 其他空间
- 用户
- 组织
- 域
- 服务
- 以下哪条命令用于创建 DevOps Git 存储库的本地副本?
- git init
- git clone
- git status
- git push
- git config
- Build Stage、Dev Deployment 和 Production Deployment 阶段都是一个 DevOps Service ________ 中的阶段
- 装配线
- 交付管道
- 生命线传递
- 作业
- 存储库
测验的答案
1. a,2. e,3. e,4. b,5. b
后续内容
在本教程中,您学习了如何利用 DevOps Services 来:
- 在 DevOps Services 上创建一个托管 Git 存储库的项目
- 将代码推送到远程 Git 存储库
- 创建一个 Delivery Pipeline,用它来构建您的应用程序,,并在您或您团队的某人向您项目的存储库推送代码的任何时候,将它部署到多个阶段。
现在通过下一篇教程在 developerWorks 上继续学习 “Bluemix 基础”:
将大量服务添加到您的应用程序中
更多 Bluemix 资源
要获取源源不断的教程和技术资源流来帮助您使用 Bluemix 进行学习、开发和连接,请参阅 developerWorks 上的Bluemix 资源中心。