【问题标题】:Jenkins triggered code deploy is failing at ApplicationStop step even though same deployment group via code deploy directly is running successfullyJenkins 触发的代码部署在 ApplicationStop 步骤失败,即使通过代码部署的相同部署组直接运行成功
【发布时间】:2016-12-08 23:32:08
【问题描述】:

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

 No such file or directory - /opt/codedeploy-agent/deployment-root/edbe4bd2-3999-4820-b782-42d8aceb18e6/d-8C01LCBMG/deployment-archive/appspec.yml

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

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

更新

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

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

【问题讨论】:

  • 能否提供一份/opt/codedeploy-agent/deployment-root/edbe4bd2-3999-4820-b782-42d8aceb18e6/d-8C01LCBMG/deployment-archive 的内容列表?
  • @RodrigoM 目录d-8C0‌​1LCBMG 根本不存在于/opt/codedeploy-agent/deployment-root/edbe4bd2-3999-4820-b782-42d8aceb18e6/ 中。这似乎是一个旧的部署 ID,每次我尝试从 jenkins 构建时,它都会查找这个特定的构建。我不确定为什么当 appspec 文件存在于 zip 存档中时它会尝试查找此文件。是否有可能它无法在 applicationstop 步骤中访问文件并因此在存档中查找?还是不管这个,存档内容都被查看了?
  • 宾果游戏。请在下面查看我的答案。

标签: amazon-web-services jenkins deployment aws-code-deploy


【解决方案1】:

作为其流程的一部分,CodeDeploy 需要参考以前的部署以进行 Redeployments and Deployment Rollbacks 操作。这些引用在部署存档文件夹之外维护。如果您按照您的指示手动删除这些存档,则 CodeDeploy 安装可能会受到严重破坏:对先前部署的引用不再正确或一致,并且部署将失败。

此时最好的办法是完全删除旧安装,然后重新安装。这将允许代码部署代理再次正常工作。

我已经学会了不手动删除/修改任何 CodeDeploy 安装文件夹或文件的艰难方法。即使您更改应用程序或部署组,CodeDeploy 也会自行解决,无需任何手动清理。

【讨论】:

  • CodeDeployment 主机代理目前有 7 个生命周期事件,而 ApplicationStop 生命周期是指最后一次成功的部署存档。所以如果最后一次成功的部署存档被删除了,当前运行的部署就会失败。
  • 好的,我知道了。我将在这些实例上卸载 codedeploy,然后在它们上重新安装。但是,这些应用程序和部署 ID 不会仍然保留在 aws 控制台上吗?另外,我的印象是,为了在实例上安装 codedeploy,需要在第一次启动实例时完成。我没有自己进行设置,因此想验证我们的设置团队所说的内容。重新安装后如何进行?我要创建新的应用程序和部署组吗?
  • 最后,我只是想确认如果在此之前部署失败,codeeploy 是否有任何此类限制在部署期间覆盖文件?正如我在对问题的更新中提到的,我收到File already exists at location 错误并试图删除部署根目录的内容。
  • 删除所有代码部署相关文件并重新安装解决问题。
  • 请看你能不能回答我这个新问题stackoverflow.com/questions/38832762/…
【解决方案2】:

为了进行部署,bundle 需要包含一个appspec.yml 文件,并且该文件需要放在顶层目录中。似乎错误消息是由于主机代理找不到 appspec.yml 文件。

【讨论】:

  • 我验证了 appspec.yml 文件存在于 S3 存档中。由于它存在,因此由代码部署直接完成的部署能够成功完成。我想这与詹金斯触发的部署无法访问文件有关。
  • @SandeepanNath 你有解决方案吗?
猜你喜欢
  • 2016-07-10
  • 1970-01-01
  • 1970-01-01
  • 2016-09-29
  • 1970-01-01
  • 2021-02-26
  • 1970-01-01
  • 2022-01-14
  • 2023-01-26
相关资源
最近更新 更多