概述
学习如何创建一个 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,可以在同一个地方开发、跟踪、计划和部署软件。 ”
完成本教程需要掌握的知识
- 本教程以前一篇教程作为基础,所以您应该完成 “ 将一个示例 Java 应用程序部署到云中 ”。
完成本教程所需的软件
第 1 步. 准备您的 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 项目。您可以浏览您的项目,邀请其他人加入您的项目,并更新您项目的图像和描述。
第 3 步. 将代码推送到 Git 存储库
将代码存储在源代码控制中心有许多好处,其中包括提供您代码的备份,允许您回滚到以前的版本,使您能够查看代码的历史记录,从而理解为什么执行更改,还使您能够轻松地与队友一起处理同一个代码库。
在本教程中,会将代码存储于托管在 Bluemix 上的一个 Git 存储库中。您将使用 EGit Eclipse 插件来管理与该 Git 存储库的连接。如果您喜欢,可使用另一个工具来处理 Git 存储库,比如命令行接口或 GUI 工具。
获取您在 DevOps Services 上的存储库的 Git URL
- 在 DevOps Services 上的项目页面中,单击右上角的齿轮图标来打开项目设置。
- 复制 Git URL。
创建一个本地 Git 存储库
- 在 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 存储库
指定应该在源代码控制中心中跟踪哪些文件后,可以将您的更改提交到本地 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 存储库
更改文件后,可以将更改提交到您的本地 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 资源
要获取源源不断的教程和技术资源流来帮助您使用 Bluemix 进行学习、开发和连接,请参阅 developerWorks 上的Bluemix 资源中心。