如何使用DevOps Services在IBM Cloud上构建和部署Meteor应用程序

在免费的IBM托管持续交付服务中使用工具链

这篇文章提供了有关如何使用IBM提供的Node.js®buildpack创建IBM Continuous Delivery Toolchain来在IBM Cloud Foundry运行时上构建和部署Meteor应用程序的说明。

假设条件

这篇文章假设:

  1. 您熟悉流星 。 如果您没有或不想使用自己的Meteor应用程序,请随意使用“ Todos”示例应用程序。
  2. 您熟悉GitHub,并使用现有的git存储库托管应用程序的源代码。
  3. 您有一个IBM Cloud帐户。 如果不是,请转到IBM Cloud注册页面并创建一个免费帐户; 和,
  4. 您已经创建了一个IBM Compose for MongoDB服务,用作您的Meteor应用程序的数据库。 您可以使用任何MongoDB提供程序-我更喜欢使用与代码接近的数据库产品以最大程度地减少数据重用性; 由于我的代码在IBM Cloud上运行,因此也可以使用IBM Cloud提供和管理的数据库服务。 要为MongoDB创建Compose的新实例,只需从IBM Cloud目录中进行(记录名称以供以后使用)。

先决条件

部署脚本使用jq的Linux版本。 该脚本假定jq位于项目的bin目录中,名称为“ jq”。 我建议下载jq-linux64二进制文件,将其重命名,然后将bin/jq添加到应用程序的git repo中。

现在,让我们开始吧。 第一步是在IBM Cloud中创建Continuous Delivery服务的实例。

以下步骤概述了如何在IBM Cloud中创建Continuous Delivery服务的实例。 这是一项免费的托管服务! 如果您已有实例,请从IBM Cloud Dashboard的“服务”区域中将其打开(或直接单击此处以直接进入该服务)。

  1. 在IBM Cloud Catalog中,找到或搜索Continuous Delivery ,然后选择它。
  2. 接受服务名称空格的默认值,或输入/选择所需的值。
  3. 选择创建 。 您的实例将被创建,并且您将被带到“持续交付入门”。
  4. 在右下角,选择查看您的工具链

现在,您有一个持续交付服务的实例。 现在是时候创建一个新的工具链了。

以下步骤将引导您完成如何创建新的工具链。

  1. 打开持续交付服务后,选择创建工具链
  2. 在“ 其他模板”部分(位于底部)中,选择“ 构建自己的工具链”
  3. 输入适当的Toolchain Name
  4. 选择创建

现在您有了一个新的但空的工具链(没有工具集成)。 现在是时候与GitHub存储库和新的Delivery Pipeline创建工具集成了。

以下步骤概述了如何为Meteor应用程序与现有 GitHub存储库创建集成。 如果您还没有GitHub存储库(例如,您刚刚使用“ Todos”示例创建了它),请按照说明创建新的GitHub存储库。

  1. 在您的工具链中,选择添加工具
  2. 找到或搜索GitHub并选择它。
  3. 在“ 存储库”类型中 ,选择“ Existing
  4. 输入应用程序的GitHub存储库URL。
  5. 选择“ 跟踪代码更改的部署”
  6. 选择创建集成

现在,您已经在工具链和应用程序的GitHub存储库之间创建了集成。 现在该创建一个新的交付管道了。

以下步骤概述了如何创建与新交付管道的集成,该管道将被配置为构建和部署Meteor应用程序。

  1. 在您的工具链中,选择添加工具
  2. 选择交付管道
  3. 输入适当的管道名称
  4. 选择创建集成 。 交付管道已创建,您将返回到“工具链”页面。

现在,您已经创建了新的传递管道。 现在是时候配置管道了。

以下步骤概述了如何配置交付管道以构建和部署Meteor应用程序。

建立阶段

  1. 在您的工具链中,选择“ 交付管道”方框。 您将被带到一个新页面,您将在其中配置管道阶段。
  2. 选择添加阶段
  3. 将阶段重命名为Build (阶段的名称并不重要,只是告诉您它的作用)。
  4. 选择“作业”选项卡。
  5. 选择添加作业 ,然后选择构建
  6. Builder类型中 ,选择Shell脚本
  7. 在“ 构建脚本”部分中,将脚本替换为下面提供的构建脚本。
  8. 输入build作为Build归档目录
  9. 如果希望每次将更改推送到Git时都启动新的构建,请选择每当将更改推送到Git时运行作业 (这是默认设置),否则您可以手动启动构建。
  10. 选择保存

构建脚本

注意:如果您希望将此脚本添加到源代码库中,请在项目的bin目录中创建一个新文件(例如,名称为compile.sh ),并在Build脚本部分中将其作为source bin/compile.sh (例如,通过输入source bin/compile.sh ),而不是直接将脚本输入Build阶段配置。 然后,传递管道将撤消对脚本的更改。

  #!/ bin / bashMETEOR_HOME =。流星/本地
 PATH = $ METEOR_HOME / usr / bin:$ METEOR_HOME / usr / lib / meteor / bin:$ PATHindent(){
   c ='s / ^ / /'
  案例$ {uname)在
    达尔文)sed -l“ $ c” ;;  #mac / bsd sed:-l在行边界上缓冲
     *)sed -u“ $ c” ;;  #unix / gnu sed:-u未缓冲的(任意)数据块
  埃萨克
 }状态() {
  回声“ -----> $ *”
 } install_meteor(){
  状态“正在安装流星(忽略有关启动脚本的任何警告)”
   export PATH = / usr / bin:$ PATH#从URL运行安装脚本所必需
  卷曲https://install.meteor.com |  shstatus“用流星更新PATH”
   PATH = $ HOME / .meteor:$ PATH
 } build(){
   (
    状态“正在建造流星束”
    流星npm安装
    流星构建$ ARCHIVE_DIR-目录-仅服务器-体系结构os.linux.x86_64状态“安装依赖项”
     cd $ ARCHIVE_DIR /包/程序/服务器/
     npm安装
     cd ../../
     chmod -R + w + x * mkdir $ WORKSPACE / $ ARCHIVE_DIR / bin
     cp $ WORKSPACE / bin / * $ WORKSPACE / $ ARCHIVE_DIR / bin /状态为“构建完成”
   )
 } install_meteor
建立 

部署阶段

  1. 在交付管道中,选择添加阶段
  2. 将阶段重命名为Deploy
  3. 选择“作业”选项卡。
  4. 选择添加作业,然后选择部署
  5. 选择相关的Bluemix TargetOrganisationSpace
  6. 在“ 部署脚本”部分中,将提供的脚本替换为下面提供的部署脚本。
  7. 选择环境属性选项卡。
  8. 选择+添加属性
  9. 选择文本属性
  10. 对于名称 ,输入MONGO_SERVICE
  11. 对于该 ,输入您的Compose for MongoDB服务的名称的名称。 如果您使用备用MongoDB提供程序,请修改部署脚本以使用适当的服务名称: VCAP_SERVICES[“compose-for-mongodb”]
  12. 默认情况下,选中“在上一阶段完成时运行作业”的选项。 在构建阶段成功完成之前,您可能希望仅在手动运行此阶段时选择“运行作业”
  13. 选择保存

部署脚本

注意:如果您希望将此脚本添加到源代码存储库中,请在项目的bin目录中创建一个新文件(例如,名称为release.sh ),然后在Deploy脚本部分中将其来源(例如,输入source bin/release.sh ),而不是将脚本输入到Deploy阶段配置中。 然后,传递管道将撤消对脚本的更改。

  / bin / bash#获取jq路径以供以后使用并设置执行权限
 DIR = $(cd“ $(目录名” $ {BASH_SOURCE [0]}“)” && pwd)
 jq = $ DIR / bin / jq
 chmod + x $ jq#源代码位于'bundle'目录中-让我们去那里
 cd bundle#创建一个基本的软件包文件-我们只需要meteor-node-stubs软件包
猫< package.json
 {
   “ name”:“ bundle”,
   “ version”:“ 1.0.0”,
   “ main”:“ main.js”,
   “依赖关系”:{
     “ meteor-node-stubs”:“ ^ 0.2.11”
   },
   “脚本”:{
     “ start”:“节点main.js”
   }
 }
 JSON#推送到Bluemix,但尚未开始...
 cf push“ $ {CF_APP}” --no-start -b nodejs_buildpack -m 256M --no-manifest#绑定MongoDB服务
 #-需要MONGO_SERVICE环境变量
如果[-z“ $ {MONGO_SERVICE}”]; 然后
   echo“将MONGO_SERVICE环境变量设置为MongoDB服务的名称”
   1号出口
其他
   cf绑定服务“ $ {CF_APP}”“ $ {MONGO_SERVICE}”
 fi#稍后获取应用程序guid
 GUID =`cf curl / v2 / apps?q = name:$ {CF_APP} |  $ jq -r'.resources [0] .metadata.guid'`#设置MongoDB URL
 #-假设使用了Bluemix提供的“ common-for-mongodb”服务
 MONGO_URL =`cf curl / v2 / apps / $ {GUID} / env |  $ jq -r'.system_env_json.VCAP_SERVICES [“ compose-for-mongodb”] [0] .credentials.uri'`
 cf set-env“ $ {CF_APP}” MONGO_URL“ $ {MONGO_URL}”#设置根URL
 ROOT_URL =`cf curl / v2 / apps / $ {GUID} / env |  $ jq -r'.application_env_json.VCAP_APPLICATION.uris [0]'`
 ROOT_URL =“ https:// $ ROOT_URL”
 cf set-env“ $ {CF_APP}” ROOT_URL“ $ {ROOT_URL}”#重新上载并启动
 cf restage“ $ {CF_APP}”
 cf start“ $ {CF_APP}” 

您会注意到,Meteor设置MONGO_URL和ROOT_URL的要求是在部署脚本中完成的,因此您无需为测试和生产版本进行更新(例如,当您增强交付管道以包括测试阶段和蓝色/绿色部署时) )…另外,将部署脚本配置为使用IBM Cloud提供的Node.js®buildpack。

测试交付管道

要测试交付管道,只需在Build阶段选择Run图标(看起来像一个播放按钮)。

如果仅在此阶段在“部署”阶段中手动运行时选择了“仅运行作业” ,则还将要求您为“部署”阶段选择“运行”图标,否则,在成功完成“构建”阶段后,会自动启动“部署”阶段。

选择查看日志和历史记录以调试错误。

LAST EXECUTION RESULT中 ,假设部署成功,则可以选择URL打开已部署的Meteor应用程序。

现在,您具有IBM持续交付工具链,可以使用IBM提供的Node.js®buildpack在IBM Cloud Foundry运行时上构建和部署Meteor应用程序。

该文章利用了Guillaume Darbonne的文章“ IBM Bluemix上的Meteor 1.4”中提供的信息,以及从cf buildpack中为流星采购内容。

我写这篇文章的主要动机是,为Guillaume帖子中的Adam Ginsburg问题提供详细的答案,并强调IBM托管和免费的IBM Cloud DevOps Continuous Delivery服务的灵活性和简单性。 我理解并承认,我可以使用现有buildpack的修改版本-最终我可能会这样做。

请在LinkedIn上与我联系或在Twitter上关注我并发送消息。 否则,只需在“ Medium”中在此处写评论即可。