Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gradle 如何使用AWS CodeDeploy/CodePipeline/S3将Gitlab Ci部署到EC2_Gradle_Amazon S3_Amazon Ec2_Gitlab Ci_Aws Code Deploy - Fatal编程技术网

Gradle 如何使用AWS CodeDeploy/CodePipeline/S3将Gitlab Ci部署到EC2

Gradle 如何使用AWS CodeDeploy/CodePipeline/S3将Gitlab Ci部署到EC2,gradle,amazon-s3,amazon-ec2,gitlab-ci,aws-code-deploy,Gradle,Amazon S3,Amazon Ec2,Gitlab Ci,Aws Code Deploy,我一直在使用Gradle开发基于Scala的SlackBot项目,并一直在寻找利用Gitlab CI部署到AWS EC2的方法 我能够使用Gitlab CI完全构建和测试我的应用程序 如何使用CodeDeploy和CodePipeline执行从Gitlab CI到Amazon EC2的部署 回答以下问题作为执行此操作的指南。我创建了一组示例文件,以与下面提供的指南相匹配。 以下链接提供了这些文件: 范围 本指南假设如下 Gitlab EE托管项目-可用于私有CE/EE实例(未测试) Gitla

我一直在使用Gradle开发基于Scala的SlackBot项目,并一直在寻找利用Gitlab CI部署到AWS EC2的方法

我能够使用Gitlab CI完全构建和测试我的应用程序

如何使用CodeDeploy和CodePipeline执行从Gitlab CI到Amazon EC2的部署


回答以下问题作为执行此操作的指南。

我创建了一组示例文件,以与下面提供的指南相匹配。 以下链接提供了这些文件:

范围 本指南假设如下

  • Gitlab EE托管项目-可用于私有CE/EE实例(未测试)
  • Gitlab作为GIT版本控制存储库
  • Gitlab CI作为持续集成引擎
  • 现有AWS帐户
  • AWS EC2作为部署的目标生产或暂存系统
  • 运行AmazonLinuxAMI的AWSEC2实例
  • AWS S3作为部署文件的存储设施
  • AWS CodeDeploy作为项目的部署引擎
  • AWS CodePipeline作为部署管道
提供的
.gitlab ci.yml
示例基于Java/Scala+Gradle项目。 该脚本是作为一个通用示例提供的,在通过该方法实现连续交付时,需要根据您的特定需求进行调整

本指南假定用户对AWS服务以及如何执行必要任务有基本了解

注意:本示例中提供的指南使用AWS控制台执行任务。虽然此处执行的任务可能有与之相当的CLI,但本指南将不介绍这些内容

动机 创建这些脚本和部署指南的动机是因为缺乏适当的教程来展示如何使用Gitlab和AWS EC2实现连续交付。 Gitlab通过与Digital Ocean的合作引入了他们的免费CI引擎,这使得用户存储库能够免费从高质量的CI中获益

使用Gitlab的主要优点之一是,它们提供了内置的持续集成容器,用于运行各种步骤和验证构建。 不幸的是,Gitblab和AWS都提供了一个集成,允许在传递构建之后执行连续交付

本指南和脚本()提供了我为使用Gitlab和AWS EC2获得成功的CI和CD而采取的步骤的简化版本,这些步骤可以帮助其他任何人开始使用这种类型的实现

在AWS上设置环境 确保连续交付过程成功的第一步是在AWS上设置必要的对象,以使部署过程成功

AWS IAM用户 初始要求是设置IAM用户:

  • 创建用户
  • 附加以下权限:

    • CodePipelineFullAccess
    • AmazonEC2FullAccess
    • AmazonS3FullAccess
    • AWSCODEDPLOYFULLACCESS
    • 内联策略:

        {
          "Version": "2012-10-17",
          "Statement": [
            {
              "Effect": "Allow",
              "Action": [
                "autoscaling:*",
                "codedeploy:*",
                "ec2:*",
                "elasticloadbalancing:*",
                "iam:AddRoleToInstanceProfile",
                "iam:CreateInstanceProfile",
                "iam:CreateRole",
                "iam:DeleteInstanceProfile",
                "iam:DeleteRole",
                "iam:DeleteRolePolicy",
                "iam:GetInstanceProfile",
                "iam:GetRole",
                "iam:GetRolePolicy",
                "iam:ListInstanceProfilesForRole",
                "iam:ListRolePolicies",
                "iam:ListRoles",
                "iam:PassRole",
                "iam:PutRolePolicy",
                "iam:RemoveRoleFromInstanceProfile",
                "s3:*"
              ],
              "Resource": "*"
            }
          ]
        }
      
  • 生成安全凭据

  • 注意:上述政策范围非常广泛。您可以通过创建限制对某些资源的访问的自定义策略来调整您的需求

    注意:请将这些凭证保存在安全的位置。您将在以后的步骤中需要它们

    AWS EC2实例和角色 CodeDeploy的实例角色

    创建将分配给EC2实例的新角色,以便访问S3

  • 根据命名约定设置名称(即MyDeploymentAppRole)
  • 选择
    amazonec2
    ,以允许EC2实例运行其他AWS服务
  • 附上以下政策:
    • AmazonEC2FullAccess
    • AmazonS3FullAccess
    • 艾斯考德普洛尔酒店
  • 注意:上述政策范围非常广泛。您可以通过创建限制对某些资源的访问的自定义策略来调整您的需求

    启动实例

    单击
    启动实例
    ,然后执行以下步骤:

    • 选择亚马逊Linux AMI 2016.03.3(HVM),SSD卷类型
    • 选择所需的实例类型(默认为t2.micro)
      • 下一个
    • 选择要成为
      MyDeploymentAppRole
      IAM角色(基于上一节中创建的名称)
      
      • 下一个
    • 选择合适的存储空间
      • 下一个
    • 使用适当的名称标记您的实例(例如,
      MyApp生产实例
      • 根据需要添加其他标记
      • 下一个
    • 根据需要配置安全组
      • 下一个
    • 查看并启动您的实例
    您将可以生成或使用SSH密钥。请选择适当的适用方法

    设置实例环境 安装CodeDeploy代理

    登录到新创建的EC2实例并按照说明操作:

    代码部署重要路径:

    • CodeDeploy部署基本目录:
      /opt/CodeDeploy agent/Deployment root/
    • CodeDeploy日志文件:
      /var/Log/aws/CodeDeploy agent/CodeDeploy agent.Log
    Tip:运行
    tail-f/var/log/aws/codedeploy agent/codedeploy agent.log
    实时跟踪部署情况

    安装项目先决条件 如果项目有任何要运行的先决条件,请确保在运行部署之前安装这些先决条件,否则启动脚本可能会失败

    AWS S3存储库

    在这一步中,您将需要创建一个S3 bucket,它将
    deploy-job:
      # Script to run for deploying application to AWS
      script:
        - apt-get --quiet install --yes python-pip # AWS CLI requires python-pip, python is installed by default
        - pip install -U pip  # pip update
        - pip install awscli  # AWS CLI installation
        - $G build -x test -x distTar # # Build the project with Gradle
        - $G distZip  # creates distribution zip for deployment
        - aws s3 cp $BUNDLE_SRC $AWS_S3_LOCATION # Uploads the zipfile to S3 and expects the AWS Code Pipeline/Code Deploy to pick up
      # requires previous CI stages to succeed in order to execute
      when: on_success
      stage: deploy
      environment: production
      cache:
        key: "$CI_BUILD_NAME/$CI_BUILD_REF_NAME"
        untracked: true
        paths:
            - build/
      # Applies only to tags matching the regex: ie: v1.0.0-My-App-Release
      only:
        - /^v\d+\.\d+\.\d+-.*$/
      except:
        - branches
        - triggers
    
    # Script to run for deploying application to AWS
    script:
      - apt-get --quiet install --yes python-pip # AWS CLI requires python-pip, python is installed by default
      - pip install -U pip  # pip update
      - pip install awscli  # AWS CLI installation
      - $G build -x test -x distTar # # Build the project with Gradle
      - $G distZip  # creates distribution zip for deployment
      - aws s3 cp $BUNDLE_SRC $AWS_S3_LOCATION # Uploads the zipfile to S3 and expects the AWS Code Pipeline/Code Deploy to pick up