【问题标题】:Auto Deploy Angular 4 App using Bitbucket Pipeline and AWS CodeDeploy使用 Bitbucket Pipeline 和 AWS CodeDeploy 自动部署 Angular 4 应用程序
【发布时间】:2018-04-06 17:21:35
【问题描述】:

我有一个带有 MongoDBNodeJSAngular 4 应用程序。我一直在研究在亚马逊 AWS EC2 实例上自动部署我的应用程序。

我正在为我的项目使用 BitBucket 存储库。阅读文章后,我遇到了 Bitbucket PipelineAWS CodeDeploy。为了完成它,需要完成许多场景和配置。看了一整天的文档,我真的很困惑。

我想在代码推送到特定分支时自动部署我的应用程序。

有人可以提供使用 Bitbucket Pipeline 和 AWS CodeDeploy 自动部署 Angular 4 (MEAN) 应用程序的分步指南吗?

如果您需要任何其他信息,请告诉我。谢谢。

【问题讨论】:

    标签: node.js amazon-ec2 deployment aws-code-deploy bitbucket-pipelines


    【解决方案1】:

    如何使用 Bitbucket Pipelines 和 AWS CodeDeploy 进行自动部署?

    关于如何自动部署应用的分步指南: 

    先决条件: - BitBucket 存储库 - AWS 账户 - 腻子

    步骤 1. 创建新的 IAM 用户

    登录您的 AWS 账户。访问https://console.aws.amazon.com/iam/

    用户>添加用户>输入用户名>复选框访问类型>选择“自定义密码”单选>取消选中“需要密码重置”>单击下一步:权限>直接附加现有策略>搜索“s3”并选择AmazonS3FullAccess


    附加现有策略 - 搜索“codedeploy”并选择 AmazonEC2RoleforAWSCodeDeploy、AWSCodeDeployDeployerAccess、AWSCodeDeployFullAccess、AWSCodeDeployRole


    下一步:查看 > 创建用户-重要提示: 1。下载 CSV 2。记下访问密钥 ID 3。记下秘密访问密钥


    步骤 2. 为 CodeDeploy 应用程序创建角色

    它是 Code Deploy 的服务角色。您分配给您将在后续步骤中创建的代码部署应用程序的此服务角色。

    登录您的 AWS 账户。访问https://console.aws.amazon.com/iam/

    角色 > 创建角色 > 单击 AWS 服务 >


    在下面选择 CodeDeploy >


    下一步:权限 > 下一个审核 > 输入角色名称(例如 CodeDeployServiceRole)> 输入描述(非强制)> 创建角色。

    步骤 3. 为 EC2 实例创建角色

    这是分配给 EC2 实例的角色,您将在后面的步骤中创建它。

    登录您的 AWS 账户。访问https://console.aws.amazon.com/iam/

    步骤 A.为此角色创建策略。 策略 > 创建策略 > 选择创建您自己的策略 > 策略名称:“CodeDeploy-EC2-Permissions”> 描述:“分配给 EC2 实例的角色的策略”> 策略文档:将以下内容粘贴到输入框中。

    {“版本”:“2012–10–17”,“声明”:[{“操作”:[“s3:Get*”,“s3:List*”],“效果”:“允许”, “资源”:“*”}]}


    验证策略 > 创建策略。

    步骤 B:创建角色 角色 > 创建角色 > AWS 服务 > EC2 > 选择您的用例 > 单击 EC2 > 下一步:权限 > 搜索“ec2”并选择您在步骤 A 中创建的“CodeDeploy-EC2-Permissions”>


    下一步:审核 > 名称:“CodeDeploy-EC2-Instance-Profile” > 角色描述:“CodeDeploy-EC2-Instance-Profile” > 创建角色

    步骤 4. 创建 EC2 实例。

    登录您的 AWS 账户。 服务 > EC2 > 启动实例 > Amazon Linux AMI(或根据需要选择)> 选择实例类型 > 下一步:配置实例详细信息 > IAM 角色 > 从下拉列表中选择您在步骤 3 步骤 B 中创建的角色(CodeDeploy- EC2-Instance-Profile) >


    下一步:添加存储>下一步:添加标签>添加标签>(重要步骤!!记下您分配的名称和键)输入键:名称,值:staging-auto-deploy(或任何您喜欢的)>


    下一步:配置安全组 > 选择现有安全组或新建 > 查看并启动 > 启动 > 选择现有密钥对或新建 > 启动实例 > 查看实例 > 记下 IPv4 公共 IP

    步骤 5. 在 EC2 实例上安装 CodeDeploy 代理

    在本地计算机上打开 Putty > 输入您在第 4 步中获得的公共 IP > 端口 22 > 在 Connection > SSH > Auth > 用于身份验证的私钥文件> 浏览> 在第 4 步中链接您的实例的密钥对文件> 打开 > 登录为:输入您的用户名

    现在根据您的实例类型安装 CodeDeploy 代理

    Linux 服务器:http://docs.aws.amazon.com/codedeploy/latest/userguide/codedeploy-agent-operations-install-linux.html

    Ubuntu 服务器:http://docs.aws.amazon.com/codedeploy/latest/userguide/codedeploy-agent-operations-install-ubuntu.html

    Windows 服务器:http://docs.aws.amazon.com/codedeploy/latest/userguide/codedeploy-agent-operations-install-windows.html

    验证代理是否正在运行。


    步骤 6. 在 BitBucket 上添加 CodeDeploy 插件

    登录您的 BitBucket 帐户 集成 > 搜索 AWS CodeDeploy > 添加 AWS CodeDeploy


    步骤 7. 在 AWS 上创建 CodeDeploy 应用程序

    登录您的 AWS 账户。 服务 > 搜索 CodeDeploy > 选择 CodeDeploy > 如果这是您第一次选择“立即开始”或创建应用程序 > 自定义部署 > 跳过演练 > 输入详细信息 > 应用名称:staging-deployment(重要:记下) 部署组名称:staging-deployment(重要:记下) 选择“就地部署” 环境配置 > Amazon EC2 实例 > Key: Name, Value: staging-auto-deploy (这些是您在步骤 4 中创建实例时创建的键和值)>


    部署配置 > CodeDeployDefault.OneAtTime > 服务角色 ARN:选择您在步骤 2 中创建的角色 (CodeDeployServiceRole) >


    创建应用程序

    步骤 8. 创建 S3 卷

    登录到您的 AWS 账户 > 服务 > S3 > 创建存储桶 > 存储桶名称:staging-deployment-bucket > 创建

    步骤 9. 存储库的 CodeDeploy 设置

    登录到您的存储库 > 设置 > CodeDeploy 设置 > 配置插件 > 按照屏幕上的说明进行操作

    步骤 A 登录到您的 AWS 账户 > Services > IAM > Policy > Create Policy > Create Your Own Policy > (此策略是为 bitbucket code deploy 插件创建的,使用它为 bitbucket codeDeploy 插件创建角色) 策略名称:BitBucketCodeDeployAddOnPolicy 政策文件:将以下内容粘贴到输入框中

    {“版本”:“2012–10–17”,“声明”:[{“效果”:“允许”,”操作”:[“s3:ListAllMyBuckets”,”s3:PutObject”],”资源”: “arn:aws:s3:::”},{“Effect”: “Allow”,”Action”: [“codedeploy:”],”Resource”: “*”}] }

    创建策略

    步骤 B 登录到您的 AWS 账户 > 服务 > IAM > 角色 > 创建角色 > 另一个 AWS 账户 >


    账户 ID:复制粘贴在 bitbucket 代码部署屏幕指令上给出的 AWS 账户 ID > 选中需要外部 ID 复选框然后:复制粘贴在 bitbucket 代码部署屏幕指令上给出的外部 ID >


    下一步:权限 > 附加权限策略 > 搜索您在步骤 A 中创建的策略 > 下一步:查看 角色名称:“BitbucketCodeDeployAddon”> 创建角色 单击您刚刚创建的角色并复制角色 ARN 并将其粘贴到 bitbucket 代码部署设置页面上的“您的角色 ARN”> 单击保存并继续 在下一页应用程序:选择您在步骤 7 中创建的 CodeDeploy 应用程序 > S3 存储桶:选择您在步骤 8 中创建的 S3 存储桶 > 保存

    步骤 10. 启用 Bitbucket 管道

    登录您的 BitBucket 帐户 Repo Settings > Pipelines > settings > 打开 Enable pipeline

    对于第 11、12、13 和 14 步,所需文件可在此 repo 的来源处参考:https://bitbucket.org/bhushanTPL/bitbucket-pipeline-and-aws-codedeploy

    步骤 11. 创建 bitbucket-pipelines.yml

    复制 bitbucket-pipelines.yml 文件。(根据您的项目要求对此文件进行更改) 将此文件添加到项目的根目录。

    文档https://confluence.atlassian.com/bitbucket/configure-bitbucket-pipelines-yml-792298910.html?_ga=2.162970750.315484667.1509451697-1615374000.1508921669#Configurebitbucket-pipelines.yml-ci_imageimage(optional)

    步骤 12. 创建 codedeploy_deploy.py

    复制 codedeploy_deploy.py 文件。 将此文件添加到您项目的根目录。

    文档和来源https://bitbucket.org/awslabs/aws-codedeploy-bitbucket-pipelines-python

    第 13 步。创建 appspec.yml

    转到此回购的来源:https://bitbucket.org/bhushanTPL/bitbucket-pipeline-and-aws-codedeploy 并复制 appspec.yml 文件。 (根据您的项目要求对此文件进行更改) 将其添加到项目的根目录。

    文档http://docs.aws.amazon.com/codedeploy/latest/userguide/reference-appspec-file.html

    第 14 步。创建脚本

    在项目的根目录下创建脚本文件夹

    在项目根目录的 scripts 文件夹中创建 startApp.sh 文件,该文件将在您的构建传输到 EC2 实例后运行命令。

    步骤 15. 添加环境变量

    登录到您的 BitBucket 帐户 > 您的存储库设置 > 环境变量 添加以下环境变量

    AWS_SECRET_ACCESS_KEY:具有所需权限的用户的密钥。

    AWS_ACCESS_KEY_ID:具有所需权限的用户的访问密钥。

    AWS_DEFAULT_REGION:目标 AWS CodeDeploy 应用程序所在的区域。

    APPLICATION_NAME:AWS CodeDeploy 应用程序的名称。

    DEPLOYMENT_CONFIG:AWS CodeDeploy 部署配置(CodeDeployDefault.OneAtATime|CodeDeployDefault.AllAtOnce|CodeDeployDefault.HalfAtATime|Custom)。

    DEPLOYMENT_GROUP_NAME:应用程序中部署组的名称。

    S3_BUCKET:存储要部署的源代码的S3 Bucket的名称。

    文档和参考https://bitbucket.org/awslabs/aws-codedeploy-bitbucket-pipelines-python


    您现在已经配置了所有必需的步骤。现在,当您提交更改并将更改推送到您的分支时,自动部署过程就会开始。请注意,在以下 bitbucket-pipeline.yml 配置中,只要您将更改推送到“staging”分支,就会开始部署过程。


    您可以通过单击存储库中的管道来检查管道的进度。


    您可以查看部署相关的日志。欲了解更多信息,请访问:http://docs.aws.amazon.com/codedeploy/latest/userguide/deployments-view-logs.html

    您可以从 AWS 监控部署,登录到您的 AWS 账户,服务 > CodeDeploy > 部署。

    【讨论】:

    • 这是一个很好的指导,谢谢。我已经完成了相同的步骤,但我找不到像documentation 那样设置file-exists-behavior 的地方
    【解决方案2】:

    您只需将管道 YML 文件配置为仅部署在该分支上。他们有一个可以添加的部署配置,尽管它仍处于 Alpha 阶段。对于当前使用的管道,您可以执行以下操作:

    pipelines:
      branches:
        master:
        - step:
          script: # Modify the commands below to build your repository.
          - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
          - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
          - export AWS_DEFAULT_REGION=$AWS_DEFAULT_REGION
          - export S3_BUCKET=$S3_BUCKET
          - export DEPLOYMENT_GROUP_NAME=$DEPLOYMENT_GROUP_NAME
          - export DEPLOYMENT_CONFIG=$DEPLOYMENT_CONFIG
          - export APPLICATION_NAME=$APPLICATION_NAME
          - echo "Starting pipelines for MASTER"
          - chmod +x gradlew
          - ./gradlew build
          - zip -r tmp/enterpriseconfigserver.zip build/libs/enterpriseconfigserver-0.0.1-SNAPSHOT.jar appspec.yml buildspec.yml
          - python codedeploy_deploy.py
    

    您显然必须进行调整以适应您的应用程序,但请务必将变量添加到 Pipelines 中的设置并导出它们,以便 docker 映像可以使用它们。我建议创建一个自定义映像,其中包含 AWSCLI、BOTO 以及您需要的所有好东西,这样您就无需等待它们在每次构建时安装。

    这也可能有用: https://confluence.atlassian.com/bitbucket/using-artifacts-in-steps-935389074.html

    【讨论】:

    • 您好,谢谢您的回答,遇到了很多麻烦,早就可以完成了,想发个综合步骤很久了。现在我已经在我的答案中发布了详细的步骤。
    • 我明白了。不错。
    【解决方案3】:

    这是您正在寻找的大量信息,但总体而言,您需要以下信息:

    1. 在 aws 上设置 codedeploy:这将涉及根据您的环境配置 codedeploy 应用程序、具有正确权限的正确部署组以及环境变量(EC2 标签等)。此外,您需要在 EC2 实例上安装必要的 codedeploy 二进制文件。

    2. 设置Bitbucket管道:配置正确的bitbucket-pipelines.yml、appspec.py、boto脚本等。看看https://bitbucket.org/awslabs/aws-codedeploy-bitbucket-pipelines-python?_ga=2.61586476.1615273408.1509882420-1278037437.1495556069

    我以上述方式使用 bitbucket 管道在 AWS 上的 Angular、Nodejs、Python 中自动部署多个存储库。

    获得更多帮助的更好方法是提出更具体的问题,或者在遇到特定问题时提出问题。

    【讨论】:

    • 您好,谢谢您的回答,遇到了很多麻烦,很早之前就可以完成了,想发个全面的步骤很久了。现在我已经在我的答案中发布了详细的步骤。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-16
    • 2020-05-11
    • 2016-09-20
    • 2017-11-11
    • 2020-10-12
    相关资源
    最近更新 更多