【发布时间】:2020-02-21 13:35:05
【问题描述】:
我正在尝试使用 aws codepipeline 部署一些新代码。第一次运行没问题,第二次部署失败是因为已有文件。如何指示我的流程覆盖现有文件?
错误信息: 部署失败,因为此位置已存在指定文件:
【问题讨论】:
-
您能指定您正在执行的部署类型吗?也许分享一些代码或示例代码,它们表示管道中的步骤未按您预期的那样工作?
我正在尝试使用 aws codepipeline 部署一些新代码。第一次运行没问题,第二次部署失败是因为已有文件。如何指示我的流程覆盖现有文件?
错误信息: 部署失败,因为此位置已存在指定文件:
【问题讨论】:
我认为最好的部署方式是在部署前删除项目目录并终止进程。这让项目目录的状态保持纯净并与原始存储库同步。
从这个链接 (appspec.yml hooks for deploying to EC2) 可以看出,CodeDeploy 在Install 阶段下载工件,我们无法访问该步骤。 Install 阶段出现在 BeforeInstall 钩子之后。
所以你应该删除目录并杀死进程之前
Install 要执行的阶段。
hooks:
BeforeInstall:
- location: codedeploy-scripts/deleteAndKill.sh
# runas: root # this might be needed depending on your setting.
正确定义codedeploy-scripts/deleteAndKill.sh 并尝试再次运行CodePipeline 和CodeDeploy。
附:删除项目目录并终止进程有些麻烦。所以一旦你使用docker,你要做的就只有docker stop {container name}和docker run {image name}。
【讨论】: