使用 git 和 Travis CI 的 CI/CD 管道,用于基于 SAM 和 C# 的无服务器应用程序
通知 1: 与此博客相关的所有代码都可以在https://github.com/turjachaudhuri/aws-sam找到 因此,我非常喜欢在 AWS 中基于 AWS SAM 创建一个无服务器应用程序并将其部署到我的 AWS 账户。 您可以在 -https://dev.to/turjachaudhuri/my-first-application-in-aws-serverless-appli
通知 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/了解有关如何开始和自定义工作流程的详细说明。
更多推荐
所有评论(0)