我们正在使用一堆可能在未来扩展的EC2实例(大约100个实例),现在我们正在寻求使用Jenkins或AWS Code部署进行自动部署.
我发现我们可以在Jenkins中使用AWS Code部署插件,但有哪些优点和缺点?
1)独立AWS代码部署2)Jenkins与AWS Code Deploy插件.
continuous-integration amazon-web-services continuous-deployment jenkins aws-code-deploy
我的git存储库中有一个子模块,我的目录结构是这样的,
app
-- folder1
-- folder2
-- submodule @5855
Run Code Online (Sandbox Code Playgroud)
我已使用autodeploy服务在AWS上部署了我的代码.现在,在服务器上,我在父目录中有代码,但子模块目录是空的.
Q1)如何在子模块中获取数据.我在服务器上的存储库不是git存储库.我是否需要先将其转换为git repo,然后运行submodule命令才能获得它?
Q2)如何自动化子模块部署?
谢谢


构建规范.yml:
version: 0.2
phases:
build:
commands:
- echo Build started on `date`
- echo Compiling the Python code...
- python HelloWorld_tst.py
post_build:
commands:
- echo Build completed on `date`
artifacts:
files:
- HelloWorld.py
- appspec.yml
discard-paths: yesRun Code Online (Sandbox Code Playgroud)
appspec.yml
version: 0.0
Resources:
- autovisionfunction:
Type: AWS::Lambda::Function
Properties:
Name: "autovisionfunction"
Alias: "staging"
CurrentVersion: "1"
TargetVersion: "2"
Run Code Online (Sandbox Code Playgroud)
似乎在 CodePipeline 中找不到 appspec.yml
我已经从 S3 存储桶下载了人工制品 zip,里面有 appspec.yml。

我想念什么?
谢谢
奥利亚
amazon-web-services aws-code-deploy aws-lambda aws-codepipeline
附加的屏幕截图是错误。没有需要我进行故障排除的 stderr 消息。我已经为 S3 设置了必要的 EC2 IAM 访问权限。那么可能是什么问题呢?
[
[![2]](https://i.stack.imgur.com/y5DKZ.png)
我还添加了 IAM 的用户要求,所以我不确定有什么问题
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:Get*",
"s3:List*"
],
"Resource": [
"arn:aws:s3:::codepipeline-ap-southeast-1-617020163322/*",
"arn:aws:s3:::aws-codedeploy-us-east-2/*",
"arn:aws:s3:::aws-codedeploy-us-east-1/*",
"arn:aws:s3:::aws-codedeploy-us-west-1/*",
"arn:aws:s3:::aws-codedeploy-us-west-2/*",
"arn:aws:s3:::aws-codedeploy-ca-central-1/*",
"arn:aws:s3:::aws-codedeploy-eu-west-1/*",
"arn:aws:s3:::aws-codedeploy-eu-west-2/*",
"arn:aws:s3:::aws-codedeploy-eu-west-3/*",
"arn:aws:s3:::aws-codedeploy-eu-central-1/*",
"arn:aws:s3:::aws-codedeploy-ap-northeast-1/*",
"arn:aws:s3:::aws-codedeploy-ap-northeast-2/*",
"arn:aws:s3:::aws-codedeploy-ap-southeast-1/*",
"arn:aws:s3:::aws-codedeploy-ap-southeast-2/*",
"arn:aws:s3:::aws-codedeploy-ap-south-1/*",
"arn:aws:s3:::aws-codedeploy-sa-east-1/*"
]
}
]
}
Run Code Online (Sandbox Code Playgroud) Amazon Web Services根据您的需求提供许多持续部署和管理工具,如Elastic Beanstalk,OpsWorks,Cloud Formation和Code Deploy.基本思想是在零停机时间内促进代码部署和升级.它们还有助于使用AWS资源管理最佳架构实践.
为简单起见,我们假设一个基本的架构,你有一个2撕裂结构; 负载均衡器后面的应用程序服务器集合,然后是使用多区域RDS DB的持久层.
跨一组实例(app服务器)的实际代码升级很容易理解.对于非常简单的概述,AWS服务会依次关闭每个节点,从而关闭连接,以便不使用相关实例.
但是,我无法理解如何管理数据库升级.假设我们从应用程序的版本1.0.0到2.0.0,并且需要更改数据库结构.通常,您将使用像Flyway这样的脚本或库来执行升级.但是,如果有一组要升级的服务器,则需要不同数据库结构的机群中存在1.0.0和2.0.0应用程序.
我需要了解实际上如何实现(高级别)以了解执行数据库迁移的最佳方式/时间.我猜他们可以通过两种方式实现这一目标,但我很难看到他们如何做到这一点并允许1.0.0和2.0.0保持数据而不会丢失.
如果他们使用第一个应用程序节点升级迁移数据库结构,同时创建1.0.0的缓存版本.连接到1.0.0应用程序的用户使用缓存版本的数据库保持不变,连接到2.0.0应用程序的用户将持久保存到新迁移的数据库.迁移所有应用程序节点后,缓存的数据将合并到数据库中.
他们似乎不太可能这样做,因为合并会非常复杂,但我看不到另一种方式.任何指针/帮助将不胜感激.
amazon-web-services aws-cloudformation aws-opsworks amazon-elastic-beanstalk aws-code-deploy
我目前正在尝试通过Github和AWS Codedeploy自动将nodejs应用程序部署到EC2实例.我已经尽可能地遵循了这里的说明 ,但是我遇到了AfterInstall钩子事件.
这是我的yml文件:
version: 0.0
os: linux
files:
- source: /backend
destination: /home/ec2-user/signal
permissions:
- object: /
pattern: "**"
owner: ec2-user
group: ec2-user
hooks:
ApplicationStop:
- location: backend/app/deploy/stop.sh
timeout: 10
runas: ec2-user
BeforeInstall:
- location: backend/app/deploy/beforeinstall.sh
timeout: 1200
runas: ec2-user
AfterInstall:
- location: backend/app/deploy/afterinstall.sh
timeout: 1200
runas: ec2-user
ApplicationStart:
- location: backend/app/deploy/start.sh
timeout: 60
runas: ec2-user
ValidateService:
- location: backend/app/deploy/validate.sh
timeout: 60
runas: ec2-user
Run Code Online (Sandbox Code Playgroud)
我通过AWS CLI调用部署,如下所示:
aws deploy create-deployment --application-name Signal --deployment-config-name CodeDeployDefault.OneAtATime --deployment-group-name Production --description "Deployment" …Run Code Online (Sandbox Code Playgroud) 因此,我一直在尝试为我的应用程序设置代码部署,但始终失败。最初,我在存储库中没有appspec.yml文件,因此我收到错误消息,指出appspec.yml文件不存在。
我现在包含了一个appspec.yml文件,但是它仍然无法正常工作,并且没有给出任何错误消息。没有提到任何事件,就像添加appspec文件之前的事件一样。
关于创建appspec.yml文件,我的知识还不多,但是我从youtube教程中得到了提示,这里是文件。
version: 0.0
os: linux
files:
- source: /
destination: /var/www/cms
Run Code Online (Sandbox Code Playgroud)
如果有帮助,则ec2实例正在运行ubuntu服务器,/ ng / www / cms是该目录,nginx应该在该目录中提供文件。
好的,我有一个 CodePipeline,它的功能非常普通
CodeCommit -> Build Docker images -> CodeDeploy to ECS
在该buildspec.yml文件中,AWS要求输出imagedefinitions.json为 CodePipeline 可用于将容器名称映射到 ECR 图像 URL 的工件。
以下是经常引用的示例,说明如何在您的 中执行此操作buildspec.yml:
printf '[{"name":"MyService","imageUri":"%s"}]' $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/myservice/app:latest > imagedefinitions.json
但这对我来说似乎完全多余。在 ECS 任务定义中,我们可以在 下包含以下内容containerDefinitions:
"containerDefinitions": [
{
"name": "MyService",
"image": "123456789.dkr.ecr.us-east-1.amazonaws.com/myservice/app:latest"
},
...
]
Run Code Online (Sandbox Code Playgroud)
为什么为了使用 CodePipeline CodeDeploy ECS 任务,我们必须提供 ECS 任务定义中已指定的信息?在这里消除对工件(以及存储所述工件的 S3 存储桶)的需要会更加干净!
也许 CodeDeploy/ECS 的一些基础知识我不明白。
我找不到任何关于此的文件!每个示例都基于GitHub repos,但我如何使用AWS CodeCommit执行此操作?
这是我在"安装"步骤中遇到的错误 -
File already exists at location /var/cake_1.2.0.6311-beta/app/webroot/../../somefile.php
Run Code Online (Sandbox Code Playgroud)
我无法断定为这种情况带来了什么样的事件.但我记得的是 -
我通过jenkins启动了部署(集成了代码部署插件).部署在"安装"步骤失败,上面粘贴了错误.
注 - 这是appspec.yml文件的files部分中的第一个文件.
据我所知,我在同一部署组上进行了一些部署,直接通过代码部署(最有可能使用Jenkins在上面步骤中创建的相同S3文件)并且它已成功完成.
此后,即使直接通过代码部署,我也无法成功部署.
背景
我检查了这个看似相关的问题并尝试通过删除内部的所有内容/opt/codedeploy-agent/deployment-root/?,如其中一个答案中提到的,但是,它导致我的实例中的代码部署已损坏并且通过Jenkins部署开始抛出此错误说来自archive的appspec文件(它是试图找到最后一次成功部署,似乎已被删除)未找到 -
即使直接通过代码部署的相同部署组成功运行,Jenkins也会在ApplicationStop步骤中触发代码部署失败
然后我重新安装了实例上的代码部署,上面提到的步骤就是我之后做的.
更新 - 开放赏金
正如罗德里戈M所回答的那样,到目前为止,从实例上的部署路径中删除这些文件对我来说是有用的,但同样不适用于这个特定文件 -
File already exists at location /var/cake_1.2.0.6311-beta/deployment/serverLoad.json
Run Code Online (Sandbox Code Playgroud)
我验证了以下内容 -
在所有实例上从上述位置删除文件后,我进行了新的部署.我发现文件重新出现但仍然抛出了与上面提到的相同的错误,部署失败了.
没有删除,我chmod'ed文件到777.相同的结果.
有趣的是,昨天我收到了多个文件的这个错误,我继续逐个删除它们,因为我发现它们并采用了新的构建.除了这个文件之外,所有其他文件的问题都得到了修复,甚至删除都没有用.我没有线索!
注 - 我现在正在进行的所有部署都是由Jenkins触发的(没有从AWS代码部署触发的直接部署).
以下是/var/log/aws/codedeploy-agent/codedeploy-agent.log包含相关错误堆栈的日志跟踪-
2016-11-10 07:38:12 INFO [codedeploy-agent(16889)]: Version file found in /opt/codedeploy-agent/.version.
2016-11-10 07:38:12 INFO [codedeploy-agent(16889)]: [Aws::CodeDeployCommand::Client 200 0.025545 0 retries] put_host_command_complete(command_status:"Failed",diagnostics:{format:"JSON",payload:"{\"error_code\":5,\"script_name\":\"\",\"message\":\"File already exists at location /var/cake_1.2.0.6311-beta/deployment/serverLoad.json\",\"log\":\"\"}"},host_command_identifier:"WyJjb20uYW1hem9uLmFwb2xsby5kZXBsb3ljb250cm9sLmRvbWFpbi5Ib3N0Q29tbWFuZElkZW50aWZpZXIiLHsiZGVwbG95bWVudElkIjoiQ29kZURlcGxveS91cy1lYXN0LTEvUHJvZC9hcm46YXdzOnNkczp1cy1lYXN0LTE6Mzc3NzAzOTYxOTk4OmRlcGxveW1lbnQvZC1VOVFPR0RBWUkiLCJob3N0SWQiOiJhcm46YXdzOmVjMjp1cy1lYXN0LTE6Mzc3NzAzOTYxOTk4Omluc3RhbmNlL2ktZWNmYzU1YTkiLCJjb21tYW5kTmFtZSI6Ikluc3RhbGwiLCJjb21tYW5kUG9zaXRpb24iOjQsImNvbW1hbmRBdHRlbXB0IjoxfV0=")
2016-11-10 07:38:12 …Run Code Online (Sandbox Code Playgroud) aws-code-deploy ×10
git ×2
jenkins ×2
amazon-ec2 ×1
amazon-ecs ×1
aws-lambda ×1
aws-opsworks ×1
deployment ×1
github ×1
node.js ×1
npm ×1