gho*_*ika 5 ansible ansible-playbook
我有一个 VPS 服务器,我经常在其中部署发行版,目录结构是我有一个当前目录,什么是发行版目录下实际发行版的符号链接。我怎样才能实现,只有 X(在我的情况下是 3)个版本留在发布目录中,其余的可以删除,以节省可用的硬盘驱动器,因为我不再需要它们了。这个设置是 capifony 使用的。
沿着这条线的东西应该可以工作,其中bin将是您的符号链接目录:
- name: Set timestamp
set_fact: release_timestamp="{{ansible_date_time.epoch}}"
- name: Deploy code from repository
action: git repo={{repo_url}} dest={{app_dir}}/releases/{{release_timestamp}} remote={{repo_remote}} version={{branch}}
- name: Create symlink to bin folder
file: src={{app_dir}}/releases/{{release_timestamp}} dest={{app_dir}}/bin state=link
- name: List old releases and clean them up
shell: "ls -t {{app_dir}}/releases | tail -n +{{releases_to_keep + 1}}"
register: ls_output
- file: name={{app_dir}}/releases/{{ item }} state=absent
with_items: ls_output.stdout_lines
Run Code Online (Sandbox Code Playgroud)
如果要回滚:
- name: Find the previous release
shell: "ls -t {{app_dir}}/releases | head -2 | tail -1"
register: ls_output
- name: Create symlink to previous release folder
file: src={{app_dir}}/releases/{{item}} dest={{app_dir}}/bin state=link
with_items: ls_output.stdout_lines
Run Code Online (Sandbox Code Playgroud)
小智 5
这是一个老话题,但我认为这个答案会有所帮助。
- name: Find all directories in releases folder
find:
paths="{{ app_dir }}/{{ releases }}"
file_type=directory
register: dirs
- name: Only last three releases
file:
path="{{ item.path }}"
state=absent
with_items:
- "{{ (dirs.files | sort(attribute='ctime'))[:-3] }}"
Run Code Online (Sandbox Code Playgroud)
也许有点偏离主题,但它会给你一个起点:
银河系中有一个 Ansible 的角色专门用于取代 Capistrano/Capifony。甚至还有 Symfony2 项目的示例:-)
用法示例:
更具体地回答你的问题:
清理releases文件夹所需的循环可以是一个shell脚本,也可以是Ansible任务的组合(保存ls输出、排序和删除)。为了使这个过程更加顺利,我们决定将此逻辑放置在 Ansible 模块中。该模块在上面链接的project_deploy角色中使用。但如果您更喜欢编写自己的角色,则该模块被提取并放置在 ot 自己的 Galaxy 角色中:
最后,如果您有兴趣更深入地了解我们为何采用当前的结构:
| 归档时间: |
|
| 查看次数: |
1437 次 |
| 最近记录: |