概述
学习如何创建一个 DevOps Services 项目来将代码存储在该项目的 Git 存储库中,以及如何创建一个 Delivery Pipeline
,以便只要您团队的任何人向您的 Git 存储库推送了更改,就会自动部署您应用程序的最新版本。
本教程是 developerWorks 上的 “Bluemix 基础” 教程系列中的一篇。
您将在本教程中完成的任务
第 1 步. 准备您的 Eclipse 工作区
第 2 步. 创建一个 DevOps Services
项目
第 3 步. 将代码推送到一个 Git 存储库
第 4 步. 配置 Delivery
Pipeline
第 5 步. 将更改推送到 Git 存储库来触发 Delivery
Pipeline
第 6 步. 观察 Delivery
Pipeline
结束语
之前在 “将一个示例 Java 应用程序部署到云中” 中,您学习了如何使用 Java™ 语言以及 Cloud Foundry
命令行接口或 IBM Bluemix Tools for Eclipse 来运行、修改、测试 Web
应用程序,并将其部署到云中。现在您已经知道了如何将应用程序部署到 Bluemix,以便任何人都可以通过网络访问它,您可能还想知道哪些 DevOps
支持可以让您的开发和操作流程变得轻松而又高效。
“IBM Bluemix DevOps Services 是云上的一个软件即服务 (SaaS),它支持持续交付。借助
DevOps Services,可以在同一个地方开发、跟踪、计划和部署软件。”
- 一个 Bluemix 帐户(注册您的 免费试用版帐户,如果您已经有一个帐户,请 登录到 Bluemix)。
- 在您的计算机上安装以下软件:
在设置 Eclipse 时,必须创建一个工作区— 您计算机上的一个供 Eclipse
存储您的所有工作的目录。不要将工作区 与项目
混淆。您可以在同一个工作区中创建和管理多个项目(它们甚至无需都是 Java 项目)。您可以将多个工作区存储在磁盘上,但
Eclipse 每次仅处理一个工作区。
在本教程中,首先需要将示例 Java Web 应用程序的一个新副本导入一个 Eclipse 工作区中。该代码非常类似于 前一篇教程 中的代码,但增加了一些文件,包括 build.xml、manifest.yml 和 Junit jar。
- 单击此按钮下载示例 Java Web 应用程序 javatutorial2.zip 的代码:
下载示例 Java Web 应用程序
- 在一个新 Eclipse 工作区中,作为现有项目而导入该代码。详细说明参阅 “将一个示例 Java 应用程序部署到云中” 中的第 3 步。
第 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 项目。您可以浏览您的项目,邀请其他人加入您的项目,并更新您项目的图像和描述。
将代码存储在源代码控制中心有许多好处,其中包括提供您代码的备份,允许您回滚到以前的版本,使您能够查看代码的历史记录,从而理解为什么执行更改,还使您能够轻松地与队友一起处理同一个代码库。
在本教程中,会将代码存储于托管在 Bluemix 上的一个 Git 存储库中。您将使用 EGit Eclipse 插件来管理与该 Git
存储库的连接。如果您喜欢,可使用另一个工具来处理 Git 存储库,比如命令行接口或 GUI 工具。
获取您在
DevOps Services 上的存储库的 Git URL
- 在 DevOps Services 上的项目页面中,单击右上角的齿轮图标来打开项目设置。
- 复制 Git URL。
- 在 Eclipse 中的 Package Explorer 视图中,右键单击
LaurenLandscapesJava 项目并选择 Team >
Share Project。
- 单击 Git。
- 单击 Next。
- 单击 Create…。
- 找到并选择您希望用来存储本地 Git 存储库的目录,然后单击 OK。
- 单击 Finish。
- 在 Configure Git Repository 对话框中,单击 Finish。
接下来,您将选择应该在源代码控制中心中跟踪哪些文件,哪些文件应该忽略。
- 在 Navigator 视图中,右键单击 LaurenLandscapesJava 项目并选择
Team > Add to Index。
- 在 Navigator 视图中,右键单击 build 目录并选择 Team >
Remove from Index。
- 在 Navigator 视图中,右键单击 build 目录并选择 Team >
Ignore。
指定应该在源代码控制中心中跟踪哪些文件后,可以将您的更改提交到本地 Git 存储库。
- 在 Navigator 视图中,右键单击 LaurenLandscapesJava 项目并选择
Team > Commit…。
- 输入一条提交消息并单击 Commit。
将代码推送到
DevOps Services Git 存储库
接下来,将您提交的更改推送到 DevOps Services 上的远程 Git 存储库。
- 在 Navigator 视图中,右键单击 LaurenLandscapesJava 项目并选择
Team > Remote > Push…。
- 在 URI 字段中,粘贴您之前复制的 DevOps Service Git URL。
- 在 Authentication 部分,键入您的 IBM ID 和密码。
- 单击 Next。
- 单击 Add All Branches Spec。
- 单击 Finish。
- 在成功推送您的提交后,将会显示一个确认对话框。单击 OK。
您的项目代码现在已存储在 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 空间。
- 在 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 下拉列表中,选择 Ant。示例项目代码包含该管道将要使用的
build.xml。(可以切换到 Eclipse 来浏览 build.xml 的内容。)
- 在 Working Directory 字段中,键入 LaurenLandscapesJava。
- 选中复选框 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 空间的唯一名称。
- 在默认情况下,部署者会使用清单文件中的说明。清单文件目前将主机设置为
llljava-${random-word}
。您希望您的应用程序部署到一致的 URL(团队的开发人员可以使用该
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
访问您的应用程序),而不是部署到包含一个随机字符串的 URL。
所以在 Deploy Script 部分的
cf push "${CF_APP}"
的后面,添加:
-n whateverYouWantYourUrlToBe
备注:请记住,该 URL 必须在所有 Bluemix 应用程序中是唯一的,所以请发挥您的创造力。 - 单击 SAVE。
您现在已有一个 Delivery Pipeline,它将构建您的应用程序(包括运行 Junit 测试),将您的应用程序部署到 dev
空间,然后将您的应用程序部署到 prod 空间。
第 5
步. 将更改推送到 Git 存储库来触发 Delivery Pipeline
在配置 Delivery Pipeline 后,是时候试验一下了!一种方法是单击构建阶段中的播放按钮来手动触发该管道。另一种选择是将一个更改推送到
Git 存储库来触发该管道,这是您将在这一步中采用的方法。
您需要做的第一件事是更改一个文件。
- 在 Eclipse 中的 Navigator 视图中,打开 WebContent >
australia.jsp。
- 向下滚动编辑器,直到看到:
<div id="price">120.00</div>
- 将价格从 120.00 更改为 130.00(需求增加了!)。
- 保存文件。
更改文件后,可以将更改提交到您的本地 Git 存储库,并将它推送到 DevOps Services 上托管的远程 Git 存储库。
- 在 Navigator 视图中,右键单击 LaurenLandscapesJava 项目并选择
Team > Commit…。
- 键入一条提交消息并单击 Commit and Push。如果提示输入 Destination Git
Repository,请键入 Git Repository URL 和您的 IBM ID 及密码。在对话框中依次单击
Next、Add All Branches Spec., 和
Finish。
- 在 Push Results 对话框中,单击 OK。
第 6
步. 观察 Delivery Pipeline
上一步推送到 DevOps Services 上托管的 Git 存储库的更改自动触发了 Delivery
Pipeline。在这一步中,将分析该管道的结果。可以在管道运行期间查看一些日志和结果。下面的操作说明假设该管道已完成,但也可以在管道运行期间分析它。
- 在 DevOps Services 上的项目页面中,单击右上角的 BUILD &
DEPLOY。
- 在 Build Stage 磁贴中,可以观察到上一个构建作业已成功完成。单击 View logs and
history。
- 在 LOGS 选项卡上,可以看到执行的 build.xml 的输出。可以注意到,您可以看到已构建的 war
和执行的单元测试的结果。
- 单击 TESTS 选项卡。
- 您可以注意到,两个测试都通过了。单击
com.ibm.devworks.examples.java.lll.TestWebsiteTitle
可以查看该文件中包含的测试列表。
- 单击 ARTIFACTS 选项卡。您可以观察到,构建阶段生成了一个 war
文件和清单文件。这些是部署阶段将要使用的工件。
- 单击页面顶部的 Back to Pipeline。
- 在 Dev Deployment 磁贴中,可以观察到已成功完成部署。单击 View logs and
history。
- 在 LOGS 选项卡上,可以看到部署的输出。
- 单击页面顶部的 Back to Pipeline。
- 在 Dev Deployment 磁贴中,您可以注意到,可以单击正在运行的应用程序的 URL
来查看它。还可以查看运行时日志,这在调试问题时很有帮助。
- 浏览生产部署的日志和正在运行的应用程序。
在本教程中,学习了如何在 Bluemix 中使用 DevOps Services 来执行以下操作:
- 在 DevOps Services 上创建一个托管 Git 存储库的项目
- 将代码推送到远程 Git 存储库
- 创建一个 Delivery
Pipeline,它将构建您的应用程序,运行单元测试,并在您或您团队的某人向您项目的存储库推送代码的任何时候,将该应用程序部署到多个阶段。
现在通过下一篇教程在 developerWorks 上继续学习 “Bluemix
基础”。您将了解如何通过云服务增强您的应用程序和添加功能:
将大量服务添加到您的应用程序中
要获取源源不断的教程和技术资源流来帮助您使用 Bluemix 进行学习、开发和连接,请参阅 developerWorks 上的 Bluemix
资源中心。