亚马逊云科技精选博客
我们使用机器学习技术将英文博客翻译为简体中文。您可以点击导航栏中的“中文(简体)”切换到英文版本。
使用 亚马逊云科技 CodeBuild 在私有子网中运行 GitHub 操作
上周,开发者工具团队宣布,
背景
虽然我喜欢 GitHub 操作,但我经常想在 亚马逊云科技 中运行我的构建。例如,我可能想访问私有 VPC 中的资源,或者只是减少构建服务和我的资源之间的延迟。我可以通过 在
亚马逊云科技 CodeBuild 是一项完全托管的持续集成服务。CodeBuild 不需要持续维护,它可以
草率排练
在本演练中,我将配置 亚马逊云科技 CodeBuild 以使用 Liquibase GitHub Action 将变更日志部署到托管在私有子网中的亚马逊 Aurora 上的 PostgreSQL 数据库。如下图所示,亚马逊云科技 CodeBuild 将被配置为与我的 Aurora 实例一起在私有子网中运行。首先,CodeBuild 将使用 NAT 网关下载 GitHub 操作来访问互联网。其次,CodeBuild 会将变更日志应用到私有子网中的 Aurora 实例。
我已经有一个 GitHub 存储库,里面有 Liquibase 的配置属性和变更日志,如下图所示。Liquibase 配置不是这篇博客文章的重点,但你可以在 Li
要创建我的构建项目,我在
如果您已经连接到 GitHub,则可以使用
成功连接到 GitHub 后,我可以将 URL 粘贴到我的存储库中,如下图所示。
我将我的构建环境配置为使用 Amazon Linux 2 上的标准构建环境。GitHub 操作是使用 JavaScript 或 Docker 容器构建的。如果操作使用 Docker 容器,则必须启用 特权标 志。Liquibase 镜像使用的是 Docker 容器,因此,我选中该复选框以启用特权模式。
对于 VPC 配置,我选择托管我的 Aurora 实例的 VPC 和私有子网,然后单击 验证 VPC 设置 以确保我的配置正确无误。
我的 Buildspec 文件包含在源代码中。因此,我选择 “ 使用构建规范文件”, 然后在存储库中输入构建规范文件的路径。
我的 buildspec.yaml 文件包含以下内容。请注意, pre_build 阶段包括一系列命令。 CodeBuild 一直支持命令,包括一系列要运行的命令行命令。在这种情况下,我只是记录一些环境变量以供以后调试。
version: 0.2
phases:
pre_build:
commands:
- echo $AWS_DEFAULT_REGION
- echo $URL
build:
steps:
- uses: liquibase-github-actions/update@v4.21.1
with:
changelogFile: changelog-root.xml
url: ${{ env.URL }}
username: postgres
password: ${{ $env.PASSWORD }}
headless: true
另请注意, 构建 阶段包括一系列 步骤 。步骤是新的,用于运行 GitHub 操作。每个构建阶段都支持命令列表或步骤列表,但不能同时支持两者。在此示例中,我使用一些配置参数指定了 Liquibase 更新操作(liquib ase-github-actions/ update)。你可以在
我想提请你注意我的 buildspec .yml 中使用的环境变量。请注意,我将数据库的 URL 和密码作为环境变量传递。这使我可以轻松地将这些值从一个环境更改到另一个环境。我已经在 CodeBuild 项目定义中配置了这些环境变量,如下图所示。URL 配置为纯文本,密码配置为密钥管理器。在 CodeBuild 中运行 GitHub 操作还有一个好处,那就是我可以轻松访问存储在
还需要注意的是,在使用 GitHub 操作时,用于访问 buildspec.yaml 中的环境变量的语法 是不同的。GitHub 操作使用环境
配置完成后,我选择 创建构建项目, 然后手动启动构建以测试配置。在以下示例中,您可以看到来自 Liquibase 更新的日志。请注意,两个变更集已成功应用于数据库。
####################################################
## _ _ _ _ ##
## | | (_) (_) | ##
## | | _ __ _ _ _ _| |__ __ _ ___ ___ ##
## | | | |/ _` | | | | | '_ \ / _` / __|/ _ \ ##
## | |___| | (_| | |_| | | |_) | (_| \__ \ __/ ##
## \_____/_|\__, |\__,_|_|_.__/ \__,_|___/\___| ##
## | | ##
## |_| ##
## ##
## Get documentation at docs.liquibase.com ##
## Get certified courses at learn.liquibase.com ##
## Free schema change activity reports at ##
## https://hub.liquibase.com ##
## ##
####################################################
Starting Liquibase at 18:33:23 (version 4.21.1 #9070)
Liquibase Version: 4.21.1
Liquibase Open Source 4.21.1 by Liquibase
Running Changeset: changelogs/changelog-1.0.0.xml::1::BobR
Running Changeset: changelogs/changelog-1.0.1.xml::2::BobR
UPDATE SUMMARY
Run: 2
Previously run: 0
Filtered out: 0
-------------------------------
Total change sets: 2
Liquibase: Update has been successful.
Liquibase command 'update' was executed successfully.
Phase complete: BUILD State: SUCCEEDED
Phase context status code: Message:
Entering phase POST_BUILD
如果我连接到 Aurora 数据库并描述这些表,你会看到 Liquibase 已经创建了 角色表(定义见 Liquibase
mydatabase=> \dt
List of relations
Schema | Name | Type | Owner
--------+-----------------------+-------+----------
public | actor | table | postgres
public | databasechangelog | table | postgres
public | databasechangeloglock | table | postgres
(3 rows)
在这个示例中,我向你展示了如何使用在 CodeBuild 中运行的 Liquibase GitHub Action 更新私有子网中的 Aurora 数据库。GitHub 操作提供了丰富的预配置操作目录,简化了配置。CodeBuild 提供托管服务,可简化我的构建环境的配置和维护。结合使用我可以获得 CodeBuild 和 GitHub Actions 的最佳功能。
清理
在这篇演练中,我向你展示了如何创建 CodeBuild 项目。如果您不再需要该项目,则只需在控制台中将其删除即可。如果您创建了本文中未解释的其他资源,例如 Aurora 数据库,则还应将其删除。
结论
GitHub Marketplace 包含由第三方和开源社区开发的近 20,000 个操作的目录。亚马逊云科技 CodeBuild 是一项完全托管的持续集成服务,可与其他 亚马逊云科技 服务紧密集成。在这篇文章中,我使用了适用于 Liquibase 的 GitHub Action 将更新部署到私有子网中的数据库。我很高兴看到在 CodeBuild 中支持 GitHub Actions 时你会做什么。你可以在