Gradle 如何使用AWS CodeDeploy/CodePipeline/S3将Gitlab Ci部署到EC2
我一直在使用Gradle开发基于Scala的SlackBot项目,并一直在寻找利用Gitlab CI部署到AWS EC2的方法 我能够使用Gitlab CI完全构建和测试我的应用程序 如何使用CodeDeploy和CodePipeline执行从Gitlab CI到Amazon 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
回答以下问题作为执行此操作的指南。我创建了一组示例文件,以与下面提供的指南相匹配。 以下链接提供了这些文件: 范围 本指南假设如下
- 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": "*" } ] }
amazonec2
,以允许EC2实例运行其他AWS服务- AmazonEC2FullAccess
- AmazonS3FullAccess
- 艾斯考德普洛尔酒店
启动实例
,然后执行以下步骤:
- 选择亚马逊Linux AMI 2016.03.3(HVM),SSD卷类型
- 选择所需的实例类型(默认为t2.micro)
- 下一个
- 选择要成为
的MyDeploymentAppRole
IAM角色(基于上一节中创建的名称)
- 下一个
- 选择合适的存储空间
- 下一个
- 使用适当的名称标记您的实例(例如,
)MyApp生产实例
- 根据需要添加其他标记
- 下一个
- 根据需要配置安全组
- 下一个
- 查看并启动您的实例
- CodeDeploy部署基本目录:
/opt/CodeDeploy agent/Deployment root/
- CodeDeploy日志文件:
/var/Log/aws/CodeDeploy agent/CodeDeploy agent.Log
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