相关疑难解决方法(0)

AWS CodeDeploy Github文件已存在

我正在尝试使用AWS CodeDeploy将我最新的更改从Github下拉到服务器.我遇到的问题是在安装步骤我收到此错误:

Error CodeUnknownError
Script Name
MessageFile already exists at location /data/sites/wordpress/api_now_playing_staging.php
Log Tail
Run Code Online (Sandbox Code Playgroud)

我的appspec.yml看起来像这样:

version: 0.0
os: "linux"
files: 
  - source: "/"
    destination: "/data/sites/wordpress"
permissions:
  - object: /data/sites/wordpress
    pattern: "**"
    owner: wp
    group: nginx
    mode: 755
    type:
      - file
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果git假设是使用CodeDeploy拉,为什么我的文件已经存在错误?难道我做错了什么?

git github amazon-web-services aws-code-deploy

5
推荐指数
1
解决办法
3311
查看次数

git修订版之间删除或修改的文件会自动从实例中删除

背景

我有一个由Jenkins触发的设置,其中包括:

  • 要部署的文件是通过phing,通过与git服务器交谈并git diff在单独的构建服务器之间进行所需的git修订,而不涉及AWS代码部署(据我所知)来准备的.詹金斯触发了phing构建.
  • 我只是将要添加/修改的文件(基于修订版的git差异)动态添加到appspec.yml文件中.我只准备要添加/修改到路径的文件,/home/jenkins/deployment/cd_deploy/codebase/并/home/jenkins/deployment/cd_deploy/在Jenkins项目的"高级项目选项"下指定了"使用自定义工作区"选项下的路径,该选项基本上是构建服务器中需要上传到的位置S3桶.请注意,我需要从两个git修订版之间删除的实例中删除文件.
  • 然后Jenkins触发AWS Codedeploy,其中包含有关我已配置的应用程序名称,Code部署的部署组的信息.

问题

我动态添加到appspec.yml文件的文件正在EC2实例中进行修改/添加,但是,奇怪的是,要删除的文件也会被删除.我验证了我没有逻辑删除我在appspec文件的beforeInstall钩子中编写的文件.我的beforeInstall挂钩中只有一个beforeInstall.sh文件,没有其他挂钩.一旦我从appspec文件中删除该挂钩,删除就会停止.这是我的appspec文件 -

version: 0.0
os: linux
files:
{Pair of files dynamically generated}
  - source: config/deployment_config.json
    destination: /var/cake_1.2.0.6311-beta/deployment
permissions:
  - object: .
    pattern: "**"
    owner: sandeepan
    group: sandeepan
    mode: 777
    type:
      - file
hooks:
  BeforeInstall:
    - location: beforeInstall.sh
Run Code Online (Sandbox Code Playgroud)

AWS Codedeploy以某种方式与我的git托管(我正在使用gitlab而不是github)进行交谈,并以某种方式获取有关要删除的文件的信息.

更新

我后来观察到,即使从appspec.yml文件中完全删除了钩子部分,并从中央构建服务器(准备好S3捆绑包)中删除了相应的.sh文件,即beforeInstall.sh,afterInstall.sh等,所以我的逻辑和对它的任何引用都没有进入实例,要删除的文件仍然会被自动删除.

更新2

今天我发现在git版本之间修改的文件也会被自动删除. 我有动态准备appspec.yml文件的逻辑.我修改为不添加一些文件.因此,有一些文件存在于git diff中,但在appspec文件中没有.结果,它们被删除但不再出现.似乎代码部署在部署之前自动进行清理.我怎么阻止它?我想添加我的自定义清理逻辑.

更新3

beforeInstall.sh的内容 -

OUTPUT="$(w | grep -Po '(?<=load average: )[^,]*')"
rm -f /var/cake_1.2.0.6311-beta/deployment/deployment_config.json
path="$PWD"
php $path"/deployment-root/"$DEPLOYMENT_GROUP_ID"/"$DEPLOYMENT_ID"/deployment-archive/beforeInstall.php" ${OUTPUT}

/usr/local/nagios/libexec/check_logwarn …
Run Code Online (Sandbox Code Playgroud)

git amazon-web-services jenkins aws-code-deploy

5
推荐指数
1
解决办法
681
查看次数

即使通过直接代码部署的同一部署组运行成功,Jenkins 触发的代码部署在 ApplicationStop 步骤也失败

当我通过 Jenkins(代码部署插件)触发时,出现以下错误 -

 No such file or directory - /opt/codedeploy-agent/deployment-root/edbe4bd2-3999-4820-b782-42d8aceb18e6/d-8C01LCBMG/deployment-archive/appspec.yml
Run Code Online (Sandbox Code Playgroud)

但是,如果我直接通过代码部署触发部署到同一个部署组中,并在S3中指定相同的zip(通过Jenkins触发器获得),则此步骤通过。

这是什么意思,我如何找到解决方法?我目前正在整合一些东西,因此需要同时通过代码部署和 Jenkins 进行部署。当我需要确保较小的单元运行良好时,我将运行代码部署触发部署。

更新

只是提到另一点,以防万一。我以前在同一个 ec2 实例上使用不同的 codedeploy“应用程序”和“部署组”,并直接使用 jenkins 和代码部署进行部署。为了解决一些问题(据称,由于部署失败,不允许覆盖现有文件),我删除了/opt/codedeploy-agent/deployment-root/<directory containing deployments>目录中的所有内容,试图按照这个答案中提到的内容进行操作。但是,请注意,我只删除了该目录中的项目。此后,我开始收到此错误 appspec.yml not found in deployment archive。所以,然后我创建了一个新的应用程序和部署组,从那时起,我就致力于它。

因此,要考虑的另一点是我是否应该做一些进一步的清理,如果 jenkins 触发的部署仍然受到这些删除的影响(即使它指的是新的应用程序和部署组)。

deployment amazon-web-services jenkins aws-code-deploy

1
推荐指数
1
解决办法
1054
查看次数