bash - 如何在 yml 脚本中调用多个多行命令?
问题描述
我不太确定如何在我的 CI 的 yml 文件中添加带有多个命令的多行脚本 - 在我的情况下是 a .gitlab-ci.yml
:
production:
stage: deploy
image: ${DOCKER_IMAGE}
script:
- while IFS='-' read -r dom app; do
docker stop "$dom-$app" || true &&
docker rm "$dom-$app" || true
docker run
--name "$dom-$app"
--detach
--restart=always
-e VIRTUAL_HOST=$dom
"$dom-$app":latest
done < $FILE
所以我在这里做的是读取一个包含应用程序列表的文件。对于每一行,我必须停止现有的 docker 映像,将其删除并使用一些参数运行新的。
- 如何连接 docker 命令(停止、rm 和运行)?也许一个
&&
? - 我必须使用
"
吗$dom-$app
?
解决方案
有几种方法可以在 YAML 中创建多行字符串。
您使用多行纯字符串的方式,所有行都将用空格折叠在一起。
此外,字符串的最后一行缩进不够。
应该引用像这样的较长字符串,因为在 YAML 中很特殊的字符串中有:
or的可能性很高。 #
我建议使用文字块样式,因为这意味着文本将完全按照您所看到的方式进行解释:
script:
- |
while IFS='-' read -r dom app; do
docker stop "$dom-$app" || true
docker rm "$dom-$app" || true
docker run \
--name "$dom-$app" \
--detach \
--restart=always \
-e VIRTUAL_HOST=$dom \
"$dom-$app":latest
done < $FILE
(请注意,序列(以 开头的项目-
)不必缩进,这就是为什么-
直接在下面script
。)
您可以在我的网站上找到有关 YAML 引用样式的更多信息: https ://www.yaml.info/learn/quote.html
推荐阅读
- azure-data-factory-2 - 在后续活动中使用 Lookup 活动结果
- c# - 在 HttpClient C# 中发送带有文件的嵌套 JSON
- java - Intellij 不显示“已分配但未使用的私有字段”警告
- javascript - Jquery / JavaScript 从一个 td 的表中获取值,该表位于一个带有 id 的 div 中
- anaconda - 无法安装任何包含 tqdm 的软件包
- javascript - 无法在下拉列表 jquery 中显示 json 数据
- mysql - MYSQL 5.5:限制子查询结果的大小
- r - tidyr - 嵌套_替代品
- javascript - 如果 ID 包含带有 vanilla Javascript 的特定文本字符串,则隐藏父元素
- javascript - 如何正确配置 gatsby-source-prismic-graphql 预览功能?