【问题标题】:Is there a cache in ansible git module?ansible git模块中是否有缓存?
【发布时间】:2016-06-24 07:59:37
【问题描述】:

我正在使用 ansible-playbook 进行部署,并且正在使用 git 检查我的源代码。我遇到的问题是,我不断获得源代码的陈旧版本。我不知道为什么会这样。在这之前还好。有没有办法禁用缓存?

- name: Checkout eclaim_revamp source code
  git: repo={{ deployment_url }} dest=/opt/eclaim_revamp force=yes version={{ eclaim_branch }} key_file=~/.ssh/id_travis accept_hostkey=yes
  when: app_version == "eclaim_revamp"

以上是我用来从 bitbucket 签出我的源代码的声明。任何帮助,将不胜感激。

更多信息

我正在针对我创建的 docker 映像运行此剧本。

【问题讨论】:

  • 你能包括你用来针对你的 docker 镜像运行 ansible 的进程吗?根据您尝试执行此操作的方式,您可能会将更改推送到不可变对象,并在完成后看到它恢复为原始图像。

标签: git caching docker ansible ansible-playbook


【解决方案1】:

由于ansible git module 应该强制签出(使用force=yes 时),陈旧文件可能是正在运行的进程保持对应该更新的文件的句柄的结果。

检查是否是这种情况,或者您是否看到任何错误消息。


从 Travis 工作(失败)中,我可以看到:

TASK [app_server : Checkout eclaim source code] ********************************

task path: /root/django_deployment/django_app_server_db_server/deployment/roles/app_server/tasks/main.yml:122

skipping: [localhost] => {"changed": false, "skip_reason": "Conditional check failed", "skipped": true}

它可能在 issue 14438(和 Ansible 2.1)中得到修复

但在这种情况下,这更简单:Low Kian Seong 确认 in the comments

我正在重写我自己的一个文件!

所以结帐工作正常,但有些文件会被重写。

【讨论】:

  • 我取消了force=yes 的注释并且我的文件仍然过时。我在一个基于 docker 的实例上运行它,当我 ssh 进入它并检查我的文件仍未更新时。
  • 是的,如果有一个进程保留了文件的句柄,则强制将被忽略,因为它无法更新所述文件。你可以尝试完全删除 git 存储库,然后再尝试下颌骨 git clone/checkout 吗?
  • 同样的事情。我的 git 树中的问题会导致这样的行为吗?
  • 如果您能够删除 repo,则不太可能是流程问题。
  • 只发生在使用 docker 的 docker 实例中。当我手动签出到本地文件时,文件已正确签出并包含最新更改。
猜你喜欢
  • 1970-01-01
  • 2019-02-04
  • 2023-01-24
  • 1970-01-01
  • 1970-01-01
  • 2019-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多