8

私はansible私の展開に使用していますdjango App

使用して

- name: Upgrade the virtualenv.
  pip: requirements={{project_root}}/www/requirements.txt virtualenv={{project_root}}/www/virtualenv

しかし、最後の実行以降にrequirements.txtが変更された場合にのみ実行したい

4

3 に答える 3

4

次の 2 つのオプションがあります。

  • requirements.txt を Ansible の制御下に置き、'copy' または 'template' モジュールを使用してから、'notify:' ステートメントで 'pip' モジュールを呼び出します。

  • 2 番目の方法はより複雑です。

    • Ansible の実行ごとに requirements.txt の md5 合計を取得し、サーバーのどこかに保存されている md5 と比較します (「stat」モジュールを使用できます)。
    • 事前に保存されたrequirements.txtのmd5合計を取得します
    • 現在の md5 が presaved と等しくない場合は、pip タスクを呼び出します ('when:' ステートメント)
    • 次の Ansible 実行のためにサーバーのどこかに新しい md5 を保存します
于 2014-03-14T13:59:01.750 に答える
1

私はgitリポジトリに対してこの非常に短い回避策を使用しています。

  - name: get requirements changes since last pull
    shell: "cd {{ project_root }}; git log --name-status --oneline origin/master
           {{ git_result.before }}..{{ git_result.after }} | grep requirements.txt"
    register: pip_check
    failed_when: false

  - name: update pip requirements
    pip: requirements={{ project_root }}/requirements.txt
         virtualenv=~/.virtualenvs/www/
    when: pip_check.stdout_lines

普遍的ではなく、クロスプラットフォームのレシピでもありませんが、多くの状況でうまく機能します.

于 2016-08-18T10:33:50.993 に答える