我有一个简单的 gitlab 管道定义如下:
deploy-to-live:
image: <custom image> # preloaded with ansible-navigator
stage: deploy
script: >-
ansible-navigator run
10_base.yml
-i inventories/live
运行此剧本时,我收到以下消息
$ ansible-navigator run 10_base.yml -i inventories/live
Running the command: docker pull <custom image>:latest
the input device is not a TTY
Please review the log for errors.
我看到多次提到此错误消息,所有这些都建议我从 docker 调用中删除
-it
选项。这听起来很合理,但我实际上并没有设置,ansible-navigator 似乎是这样。我知道我可以使用 --container-options
指定容器选项,但这不允许 remove 选项。
如何删除此错误消息并仍然在 gitlab 作业中看到 ansible-navigator 的日志输出,就像在本地命令行上一样?
看来这里有什么误会。
首先,
ansible-navigator
是一个基于文本的用户界面,所以我不确定为什么要在 CI/CD 环境中使用它。
接下来,它默认情况下已经在执行环境中运行了 - 这是另一个容器 - 因此当您将 GitHub 阶段包装到您自己的自定义映像中时,它很可能默认无法工作。
-it
CLI 标志指的是 Docker 交互 + TTY 模式,而 ansible-navigator
有自己的交互 输出模式(默认启用,因为它是 UI),应更改为 stdout
输出模式为了只有日志。
总而言之,我看到了解决您问题的几种选择:
如果您的容器已经具有适当的依赖项,请继续使用
ansible-navigator
但是:
stdout
模式而不是 interactive
模式:deploy-to-live:
image: <custom image>
stage: deploy
script: >-
ansible-navigator run 10_base.yml
-i inventories/live
--execution-environment false
--mode stdout
继续使用
ansible-navigator
但是:
image
包装纸;execution-environment:
enabled: True
image: <custom_image>
stdout
模式而不是 interactive
模式:deploy-to-live:
stage: deploy
script: >-
ansible-navigator run 10_base.yml
-i inventories/live
--mode stdout
使用标准
ansible-playbook
在具有 Ansible 和所需依赖项的容器内(换句话说 - 一个
执行环境容器):
deploy-to-live:
image: <custom image with Ansible and dependencies>
stage: deploy
script: >-
ansible-playbook 10_base.yml
-i inventories/live
有关更多详细信息,请查看
ansible-navigator
GitHub 上的自述文件 和 配置参考。