IBM Cloud Docs
开发应用程序并将其部署到虚拟机

开发应用程序并将其部署到虚拟机

本教程演示如何设置 Continuous Delivery 工具链并将简单应用程序 (应用程序) 交付到虚拟机。 您可以设置源控制,然后在不同的部署阶段构建、测试和部署代码。

缺省情况下,工具链使用基于 Maven 的样本 Java Hello World 应用程序,但您也可以自带应用程序并改为链接到该应用程序。 此工具链配置有管道,用于通过 代码风险分析器,源代码控制,问题跟踪和联机编辑进行持续集成和持续交付。

应用程序代码存储在应用程序源控制存储库 (repo) 中。 构建和部署脚本存储在管道源代码控制存储库中。 您可以定制构建和部署脚本以满足应用程序的开发需求。

本教程中的工具链实现了以下最佳实践:

  • 在每个 Git 落实上构建应用程序二进制文件,并根据构建号,时间戳记和落实标识设置标记以实现可跟踪性。
  • 自动将构建的二进制文件插入到部署清单中。
  • 创建 Object Storage 实例和存储区,以存储现成构建的瞬态二进制文件。 对于高级用户,可以配置现有 Artifactory 存储库并将其与工具链集成,以支持对构建工件进行版本控制,从而实现可跟踪性和合规性目的。

工具链实现了三个管道,用于构建应用程序代码并将其部署到虚拟机。

  • 持续集成 (CI) 管道: 当将更改合并到应用程序源代码存储库的主分支时,将触发此管道。 CI 管道在应用程序源代码上运行单元测试,代码覆盖和静态扫描。 CI 管道还会生成二进制构建工件,并将其上载到工具链中配置的 Object Storage 存储区或 Artifactory。 而 CI 管道会生成构建工件的元数据,并将其存储在“库存”存储库中。

  • 持续部署 (CD) 管道: 此管道由成功的 CI 管道运行触发。 CD 管道负责将构建工件部署到部署环境。 管道通过运行运行状况检查来验证应用程序的成功部署,并在部署失败时回滚更改。

  • 拉取请求 (PR) 管道: 在应用程序源代码存储库中创建合并或拉取请求时,将触发此管道。 通常,此请求由应用程序源代码开发者手动创建,以将更改从其开发分支合并到主分支或任何其他分支。 PR 管道在应用程序源代码上运行单元测试和静态扫描。

caption-side=bottom"
架构图
*

准备工作

设置并配置工具链的虚拟服务器实例,以将应用程序部署到虚拟服务器实例。 您可以使用现有虚拟服务器实例或设置符合以下要求的新虚拟服务器实例:

  1. 在 IBM Cloud上设置虚拟服务器实例
  2. 保留浮动 IP 地址 以使虚拟服务器实例可通过公用因特网进行访问。 或者,您可以使用可用的 DNS 条目。 本教程使用浮动 IP 地址。
  3. 为虚拟服务器实例创建用户 (最好是非特权用户) 和 SSH 密钥
  4. 为虚拟服务器实例配置 安全组。 通过为 TCP 添加允许端口 8080 的入站规则,使工具链能够对已部署的应用程序执行运行状况检查,以便它可以访问应用程序端点。 有关添加入站规则的更多信息,请参阅 管理安全组
  5. 请确保 Java™ SDK 已安装在 VM 上,或者使用以下命令进行安装: yum install -y tar java
  6. 可选。 如果需要在 Key Protect 中存储私钥,请对该值执行 base64 编码。 有关所需命令详细信息的更多信息,请参阅 映像签名: 生成 GPG 密钥

创建工具链

要创建 为虚拟机开发应用程序 工具链,请单击

创建工具链

或者,从IBM Cloud控制台,单击菜单图标汉堡包图标>平台自动化>工具链。 在“工具链”页面,单击“创建工具链”。 在创建工具链页面,单击为虚拟机开发应用程序

配置简单虚拟服务器实例

  1. 创建 选项卡中,查看缺省设置。

    工具链设置
    工具链
    *

  2. 工具链的名称在 IBM Cloud 中起到标识符的作用。 如果要使用其他名称,请更改工具链的名称。 由于工具链名称用于构建用于访问应用程序的 URL,因此请确保指定一个唯一的名称。

  3. 缺省情况下,工具链会在 Git Repos and Issue Tracking中创建源存储库。 要为Git源代码库使用不同的提供商(如GitHub或GitLab,从可用代码库列表中选择。

    此工具链使用 Continuous Delivery 服务中包含的工具。 如果该服务的实例尚未位于所选资源组中,那么当您单击 创建 以创建工具链时,将使用免费轻量套餐自动添加该服务实例。

配置应用程序存储库

  1. Git Repos and Issue Tracking 选项卡中,查看用于指定应用程序源代码位置的缺省设置。

  2. 缺省情况下,工具链使用基于 Maven 的样本 Java Hello World 应用程序。 您可以改为更新位置设置以链接到自己的应用程序。

    应用软件库
    应用软件
    *

配置库存存储库

库存存储库存储构建和工件的元数据。 要触发管道以将落实中描述的工件部署到虚拟服务器实例,落实到库存存储库,然后运行接受任务。

工具链库存
工具链库存

配置 Delivery Pipeline

  1. 转至 Delivery Pipeline 选项卡。

    Delivery Pipeline configuration
    Delivery Pipeline configuration

  2. 指定现有 IBM Cloud API 密钥或创建密钥。 工具链使用此密钥与集成到工具链中的其他云服务进行交互。

  3. 指定正在运行虚拟服务器实例的区域,例如 us-south

  4. 使用 aaa.bbb.ccc.ddd 格式指定虚拟服务器实例的浮动 IP 地址。

  5. 选择 SSH Key 认证类型并指定以下凭证:

    • 用户名: 有权部署和运行应用程序的虚拟服务器实例用户的用户名。
    • SSH 密钥: 用于运行和部署应用程序的用户专用 SSH 密钥。
  6. 运行以下命令以在虚拟服务器实例上为有权部署和运行应用程序的用户创建新的密钥对。

            # Create the SSH key
                `ssh-keygen -C cloud.ibm.com`
            # copy public key to the VSI
                `ssh-copy-id -i .ssh/id_rsa.pub <UserName>@<xx.yy.zz.aa>`
    

可选。 创建瞬态存储器配置

对源的任何更改都会触发持续集成管道。 当连续集成运行成功时,将创建构建或二进制工件并将其保存在瞬态存储器中,然后将其部署到目标虚拟服务器实例。

  1. 从工具链中的 更多工具 选项卡,可以选择使用 Object Storage 或 Artifactory 作为瞬态存储器来保存构建二进制文件。
  2. 如果您的帐户不包含任何 Object Storage实例,那么工具链将在缺省资源组中创建新的 Object Storage 实例。 接下来,工具链将创建一个存储区,该存储区使用与新 Object Storage 实例中的工具链相同的名称。
  3. 如果您的帐户已包含 Object Storage 实例,那么工具链将使用其中一个实例来存储瞬态构建工件。
  4. 要配置 Object Storage 或 Artifactory 详细信息,请参阅 配置高级用户选项 部分。
  5. 单击 创建 以创建工具链。

探索新的工具链

创建工具链后,它会在图中显示属于工具链的每个工具集成。

浏览管道

您可以浏览管道以了解工具链流以及在每个管道中运行的不同操作。 例如,要查看多个步骤 (例如 cra-discovery-scan ) 以及参数和状态的详细信息,请单击 CI 管道工具集成,然后单击 已成功 PipelineRuns

CIPipelineRun详细信息*
集成PipelineRun
*

浏览 DevOps Insights

DevOps Insights 聚集来自工具链的数据,以便您可以跟踪和改进端到端 DevOps 流程。 查看质量指标,跟踪构建和部署作业,查看策略等。

如果您的代码不符合策略或超出策略,那么会停止部署以防产生风险。 您可以将 DevOps Insights 用作持续交付环境的安全网,或者作为实施和改进质量标准的方法。

下图显示了质量控制面板,它提供了质量数据集,如每个应用程序的单元测试、代码覆盖率、功能验证测试和静态安全扫描。

DevOps Insights Quality Dashboard
DevOps Insights Quality Dashboard

探索 GitOps

GitOps 是一组实践和工具,将 Git 置于 DevOps 工具链的中心,并作为要在虚拟服务器实例上部署的内容的标准来源。 有了GitOps,开发人员和操作人员可以使用熟悉的Git工作流程来定义、审查、批准和审核对基础架构和应用程序的更改。 自动化工具负责将其目标的实时状态与 Git中描述的所需状态同步。

通过使用本教程中的工具链,您可以通过为每个环境创建一个分支来控制到多个环境的部署。 以下示例工作流程在对库存存储库的特定分支进行拉取请求或落实时触发 Continuous Delivery 管道。

  1. 通过提供虚拟服务器实例 (例如应用程序存储库和 Object Storage) 的详细信息,为 IBM Cloud 上的虚拟服务器实例创建工具链。 请勿指定库存存储库的任何详细信息。
  2. 创建工具链后,从“库存”存储库创建多个分支,例如 DevStagingProd
  3. 单击 Continuous Delivery 管道并转至触发器。 将触发器源添加为具有要触发 CD-Pipeline (Master) 的分支的库存存储库。
  4. 在成功集成后,修改 Continuous Integration 管道以落实到相应的 Inventory 存储库。
  5. 在库存存储库中有足够的落实可用后,将存储库中的拉取请求合并到主存储库中以启动 Continuous Delivery 构建。

通过使用GitOps,您可以为每个环境创建一个分支,从而控制多个环境的部署。

配置高级用户选项

要访问高级用户选项,请转至 更多工具 选项卡。

  • 指定现有 Cloud Object Storage 实例以存储瞬态构建工件:

    • 在要存储瞬态构建工件的 Object Storage 实例中指定存储区的名称。 要将对象上载到存储区,它必须位于创建工具链的同一区域中。

    • 选择对指定的存储区具有读写访问权的 API 密钥。

    Cloud Object Storage Integration Details
    Cloud Object Storage integration details

  • 要使用 Artifactory 帐户来存储瞬态构建工件,请指定 Artifactory 实例的详细信息:

    • Artifactory 服务器 : 的 服务器 URL HTTPS URL Artifactory
    • 类型: 从 npm,maven 或 docker 中选择
    • Artifactory UserID:登录Artifactory服务器的用户 ID,格式为 xxx.xxx@xxx.com
    • Artifactory APIKey: 由用户生成的 APIKey (现有或新)
    • 发布 URL:发布 URL,用于存储工件的 Artifactory repo

仅当您使用 Artifactory 配置时,Artifactory 中的某些字段才是必填字段。

Artifactory Integration Details
Artifactory integration details

单击 创建 以创建工具链。 This process might take several minutes to complete.

可选。 回滚到先前版本的已部署应用程序

由于测试结果,代码质量问题和其他问题,您可能希望回滚已部署的代码。 您可以使用库存存储库回滚到应用程序的先前版本。

  1. 输入 git clone <inventory-repo-url> 以从管道克隆并下载 Inventory Git 存储库。 Continuous Delivery 管道侦听库存存储库的主分支。
  2. 输入 git log 以查看 Continuous Integration 管道完成的落实列表。
  3. 输入 git checkout master 以检出主分支。
  4. 输入 lastCommitID=$(git log --format="%H" -n 1) 以检索存储库的最后一个落实标识。
  5. 输入 git revert $lastCommitID 以通过还原当前更改来创建新的落实。 请确保为此还原提供落实消息。
  6. 输入 git push 以将更改推送到 Inventory 存储库,并启动 Continuous Delivery 管道以进行应用程序部署。

后续步骤

虽然本教程使用了示例 Java 应用程序,但您还可以在虚拟服务器实例上部署其他基于语言的应用程序。 要将其他基于语言的应用程序部署到虚拟服务器实例,请删除您为此教程创建的工具链和虚拟服务器实例。