amazon-web-services - 如何从 codebuild 并行部署多个 shell 脚本?
问题描述
所以目前我有一个代码构建,当我推送到我的存储库时由代码管道触发。
这些文件有一个 .sh 文件、一个 buildspec.yaml 文件和一个包含 1 到 n 个文件夹的文件夹,每个文件夹都有自己的 .sh 文件,然后在文件夹内部署 cloudformation 资源。
deploy.sh
buildspec.yaml
Folder
|
|-- Directory1
| -- deploy.sh
| -- template.yaml
|
|-- Directory2
| -- deploy.sh
| -- template.yaml
|
|-- Directory3
| -- deploy.sh
| -- template.yaml
目前,第一个 .sh 文件只是一个 for 循环,它将 cd 进入每个目录并按顺序运行 .sh 脚本。
我试图使这个过程是并行的而不是顺序的。由于可能有未知数量的子文件夹,它可能是一个漫长的过程,我不希望它等待以前的资源。
有没有人在这方面有建议/经验?我进行了一些搜索,但在我的测试中没有发现任何结论性的东西。
编辑:运行 for 循环的主 build.sh 文件
#!/bin/bash
set -e
PROFILE='new-profile'
aws configure --profile $PROFILE set credential_source EcsContainer
REGION=$AWS_REGION
for directory in *; do
if [ -d ${directory} ]; then
# Will not run if no directories are available
chmod +x $directory/deploy.sh
$directory/deploy.sh -p new-profile &
# cd $directory
# echo $directory
# echo "---------------------------------------------------------------------------------"
# echo "Start deploying $directory resources..."
# echo "---------------------------------------------------------------------------------"
# chmod +x ./deploy.sh
# ./deploy.sh -p new-profile &
# cd ../
# echo "---------------------------------------------------------------------------------"
# echo "End deploying $directory resources..."
# echo "---------------------------------------------------------------------------------"
fi
done
wait
echo "finished deployment"
解决方案
在您的主脚本中,只需循环所有 sub-deploy.sh 并在后台运行它们,将 & 添加到字符串的末尾:
$directory/deploy.sh &
在你的主脚本结束时写
wait
echo "all sub-deploy processes are finished"
推荐阅读
- python - Python - 海龟程序窗口打开但没有任何反应
- java - Android Java 将 OnClick 设置为多个嵌套标签中的 ImageView
- javascript - 如何使用 create-react-app 安装以前的 react.js 版本?
- android - 当这两个 Mapbox 库一起使用时,我的应用程序崩溃了
- computer-vision - 图像分割:识别不规则边界的斑点和划痕
- java - Mongodb/Java db.collection.foo() 不可用
- php - php页面列出和更新sqlite
- database - 参考多活动日志的架构
- android - 颤振BUG!阶段“语义分析”错误中的异常
- sql - 如何在 SQL 中使用两个 where 条件?