我正在尝试自动化 部署管道对于我的申请。这是自动化架构,我想出了:
如您所见,我使用的是 代码管道 和 代码构建 自动化我的部署。我的后端基于 Serverless Framework ,它在触发 sls deploy
时部署 lambda 函数命令。就是这个原因,我没用代码部署 做传统的部署。 buildspec.yml
文件如下所示:
version: 0.1
phases:
install:
commands:
– apt-get -y update
– npm install -g serverless@1.9.0
build:
commands:
– cd nj2jp/serverless && npm install
post_build:
commands:
– serverless deploy –verbose
artifacts:
files:
– serverless.yml
discard-paths: yes
现在,我有 3 个问题 关于 代码构建 和 无服务器 :
问题一:命令
sls deploy
依赖于一个名为 config.yml
的文件其中包含诸如数据库密码之类的 secret 。该文件不会被检入 git。您认为包含config.yml
的最佳方式是什么?在代码构建中?问题二: 回滚 如果我们必须使用 部署传统的 EC2 应用程序,可以使用 AWS 完成代码部署 .在无服务器的情况下,我们不使用 代码部署 serverless 也支持 回滚 特征。我们如何在 中利用无服务器回滚代码管道 ?
问题3: 时触发 codePipeline拉取请求 发生。我看到一些帖子说,codePipeline 不支持。但是这些帖子是去年的,codePipeline 现在是否支持 Pull Request?
哈克答案 (不正确,但有效。需要您提供更好的答案。)
答案1:
config.yml
文件可以保存在私有(private) S3桶并且可以作为 pre-build
的一部分被拉到 codeBuild setup 或者我们可以将所有 secret 添加到 codeBuild 的 Env 变量中。我不喜欢第二种选择,因为我希望在所有环境中保持一致。这个问题有更好的解决方案吗?答案2:我想不出这个黑客。期待你的答案。
答案3:我遇到了一些使用 [APIGateway + Lambda + S3] 的博客文章。触发代码管道 对于拉取请求。但我觉得,这个功能必须作为开箱即用的功能提供。此功能的 codePipeline 是否有任何更新?
最佳答案
问题一
更新:
无服务器框架现在支持从 Parameter Store 引用变量。这意味着您可以跳过在 CodeBuild 中定义它们,因为无服务器将在部署时从 Parameter Store 中检索它们。
例子:
无服务器.yaml
provider:
name: aws
runtime: nodejs8.10
region: us-west-2
stage: ${env:REGION}
environment:
S3_BUCKET: ${env:/s3/bucket}
# Use ~true for SecureString parameters
DB_USERNAME: ${ssm:/db/username~true}
DB_PASSWORD: ${env:/db/password~true}
原答案:
如果你想坚持你的
config.yml
,那么使它工作的唯一方法是通过类似于您已经在做的黑客攻击,因为它不受版本控制。我的建议是将您的环境变量存储在 EC2 参数存储中,您可以在 CodeBuild
buildspec.yml
中引用它.这些变量可在您的 serverless.yml
中访问。使用 ${env:VARIABLE_NAME}
.对于本地开发,您还应该使用真实的环境变量,而不是将它们存储在
config.yml
中。 . direnv 等工具擅长这一点。问题2
您可以通过重新运行之前的 CodeBuild 作业来进行手动回滚。我想不出像 CodeDeploy 那样自动完成它的简单方法。也许 Lambda 函数可以进行部署后测试,如果失败,它可以触发重新运行之前的 CodeBuild 作业。
问题3
CodePipelines 绑定(bind)到单个分支,因此要使其在 PR 分支上工作,您必须像您提到的文章那样进行黑客攻击。我已经求助于使用 API Gateway + Lambda + CodeBuild(无 CodePipeline)来做到这一点。
关于amazon-web-services - 具有无服务器框架的 AWS codeBuild/codePipeline,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46189597/