如何使用AWS CodeDeploy部署monorepo中的website子目录?
用AWS CodeDeploy只部署Monorepo里的Website子目录
没问题,我来一步步帮你搞定这个需求——让CodeDeploy只处理monorepo里的website子目录,并且使用它自带的appspec.yml。下面是几种实用的方法,你可以根据自己的部署流程选:
方法一:通过CodePipeline配置(推荐给持续部署场景)
如果用CodePipeline做自动化部署,只需要调整部署动作的设置就行:
- 找到CodePipeline里的CodeDeploy部署阶段,点击「编辑」这个动作
- 翻到「高级选项」,找到**"Appspec文件"**这一项,直接填
website/appspec.yml——这就告诉CodeDeploy别找根目录的配置,去website文件夹里读 - 要是想进一步精简部署包、只传website的内容,可以在CodeBuild的
buildspec.yml里修改输出配置:
这样构建出来的包就只有website的内容,传输更快;要是monorepo里其他目录有依赖需要一起传,这步可以跳过,只改Appspec路径就行。artifacts: files: - 'website/**/*' base-directory: '.'
方法二:用AWS CLI手动部署
如果是手动上传部署包或者用CLI触发部署,直接在命令里指定Appspec路径就行:
aws deploy create-deployment \ --application-name 你的应用名 \ --deployment-group-name 你的部署组名 \ --s3-location bucket=你的S3桶名,bundleType=zip,key=monorepo打包文件的路径 \ --file-exists-behavior OVERWRITE \ --appspec-file website/appspec.yml
重点就是最后那个--appspec-file参数,明确告诉CodeDeploy要读哪个目录下的配置文件。
方法三:根目录Appspec转发(备选方案)
要是因为权限或者旧版本Agent的限制没法直接指定路径,可以在monorepo根目录建一个临时的appspec.yml,把所有部署逻辑转发到website里:
version: 0.0 os: linux # 你的服务器是Windows就改成windows files: - source: website/ destination: /你的服务器部署路径 # 比如/var/www/website hooks: BeforeInstall: - location: website/scripts/before-install.sh timeout: 300 runas: root # 其他钩子(比如AfterInstall、ApplicationStart)都照着这个格式,指向website里的脚本
不过这种方法有点绕,还是前两种更直接。
几个要注意的点
- 确保CodeDeploy的服务角色有足够权限读取部署包里的website目录内容
- 要是目标服务器上的CodeDeploy Agent版本太老,可能不支持自定义Appspec路径,记得更到最新版
- 第一次部署后,去CodeDeploy控制台看日志,确认它确实读对了
website/appspec.yml,而且只部署了website的内容
内容的提问来源于stack exchange,提问作者Zerium
相关产品推荐
相关产品推荐

