通知 1: 与此博客相关的所有代码都可以在https://github.com/turjachaudhuri/aws-sam找到

因此,我非常喜欢在 AWS 中基于 AWS SAM 创建一个无服务器应用程序并将其部署到我的 AWS 账户。

您可以在 -https://dev.to/turjachaudhuri/my-first-application-in-aws-serverless-application-repository-1ahc找到所有详细信息

但是,我想更进一步。我想创建一个 CI/CD 管道,这样每次我在 git 上对我的无服务器应用程序提交任何更改时,它都会使用构建/交付管道自动部署到 AWS。

那么,我们该怎么办?

像往常一样,我首先用 Google 搜索看看其他开发人员在使用什么。我发现 TravisCI 在开源世界中显然非常流行。

“Travis CI 是一个托管的分布式持续集成服务,用于构建和测试托管在 GitHub 上的软件项目。开源项目可以通过 travis-ci.org 免费测试。私有项目可以在 travis-ci.com 上进行测试收费基础。”

我发现了一些关于如何使用 Git 和 Travis CI 设置 CI/CD 管道的博客文章,但它们都是针对 NodeJS 应用程序的,并且没有一个适合我的确切用例。所以,我决定自己动手。

如何开始?

这里的假设是我们有一个基于 SAM 模板的经过全面测试的无服务器应用程序,可以使用 SAM CLI 单独部署,我们只想将它连接到某种持续集成管道。

好的,让我们开始吧。

使用您的 GitHub 帐户登录 TravisCI。该服务将自动从 GitHub 检索您的所有公共存储库,并将它们显示在如下列表中:

[图像描述](https://res.cloudinary.com/practicaldev/image/fetch/s--TfrYYzuY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/uploads/articles/50om6wbztzrjqwo1e9uo.png)

启用要使用 TravisCI 配置的存储库旁边的单选按钮,然后单击该存储库以导航到 TravisCI 详细信息页面。此页面显示构建的详细信息、它们的状态等。 TravisCI 旨在与 Github 无缝集成。

问题 1: 在配置 TravisCI 以使用您的 repo 后,您会发现详细信息页面为空。您可能会觉得您配置错误,但实际上,除非 git 存储库具有 .travis.yml 文件,否则不会发生任何事情。一旦 .travis.yml 文件被推入 git ,自动构建就会开始。

什么是 .travis.yml ?

这是 TravisCI 用于启动构建的 yaml 文件。它基本上是一系列步骤,指导 TravisCI 遵循什么过程来构建和最终部署您的工件。它需要出现在项目的根目录中。您基本上可以将其视为包含相同命令的脚本,这些命令与您自己在个人计算机上部署应用程序时使用的命令相同。

我的 .travis.yml 文件看起来像这样,我添加了注释以使其更易于理解。

# this is the language of the solution . i am using csharp
language: csharp
mono: none
# here we tell the version of dotnet sdk that the app uses
dotnet: 2.0
# here we identify the solution that needs to be built
solution: S3ToDynamo.sln
# this tells that only updates in master branch will be considered for build
branches:
  only: master
# here we need to install all our dependencies to enable the future steps
install:
- pip install --user awscli
- pip install --user aws-sam-cli
# here the commands needed to build the solution are provided
script:
- dotnet restore
- dotnet publish
- sam validate --template template.json
- sam package --template-file template.json --s3-bucket aws-sam-test-1 --output-template-file serverless-output.yaml
# here the commands needed to deploy the solution are provided
deploy:
  provider: script
  script: sam deploy --template-file serverless-output.yaml --stack-name aws-sam-trial-1 --capabilities CAPABILITY_IAM
  skip_cleanup: true
  on:
    branch: master
notifications:
  email:
    on_failure: always
# here we provide the variables that are set globally for the build+deploy
env:
  global:
  - AWS_DEFAULT_REGION=ap-south-1

进入全屏模式 退出全屏模式

问题 2: 要让任何类型的 CI/CD 管道运行,要记住的重要一点是,您需要了解正在运行的设置的前提。 CI/CD 管道不过是美化的构建和部署服务器(简单地说)。每当触发构建(例如通过源代码控制推送)时,CI/CD 框架只需将源代码从源代码控制存储库下载到空白 VM(例如运行 Linux)。所以,我们需要记住,服务器不会有很多我们认为理所当然的包/依赖项。这就是为什么在 .travis.yml 文件中您需要指定所需的一切,甚至是您可能认为理所当然的裸机安装。

例如,在我的 .travis.yml 文件中,我们提到了

pip install --user awscli

进入全屏模式 退出全屏模式

在本地构建过程中并非每次都需要此步骤,但 TravisCI 需要它,因为运行构建的服务器只是一个空白画布。

问题 3: 在 AWS 部署的情况下,我们需要的一件关键事情是 AccessKeyID 和 SecretAccessKey 以及我们需要将解决方案部署到的区域。在上面的 .travis.yml 中,您可以看到 AWS_DEFAULT_REGION 已设置。但是,此处未提及 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY。那么,如果没有这些重要信息,TravisCI 将如何部署到 AWS?

这是因为我从 TravisCI 控制台设置了安全参数/变量。这可以使用 TravisCI 中 GitHub 存储库的设置部分来完成。我相信这是一个很好的做法,因为 .travis.yml 文件将成为您的公共 git 存储库的一部分,并且在源代码管理中公开秘密是一种非常糟糕的做法。

TravisCI 页面的环境变量部分的屏幕截图。

[图像描述](https://res.cloudinary.com/practicaldev/image/fetch/s--MK8fPzhX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/uploads/articles/g8vc2rzdi2tx261ewmjj.png)

全部完成,现在怎么办?

一旦 .travis.yml 文件被推送到 git repo 中,一两分钟内就会在 TravisCI 控制台中开始构建。您可以在那里查看日志以监控构建中发生的情况。

如果 .travis.yml 文件写得很好,并且项目构建正确,您将看到如下屏幕:

[图像描述](https://res.cloudinary.com/practicaldev/image/fetch/s--aXDyBc9A--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/uploads/articles/fukaw7emtb2s7ciq8o2a.png)

从这里去哪里?

为您的无服务器项目设置 CI/CD 管道,并告诉我结果如何。查看https://docs.travis-ci.com/了解有关如何开始和自定义工作流程的详细说明。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐