Ansible
Ansible是一种自动化工具,用于在多个计算机上自动化配置、部署和管理软件应用程序。它是一种基于代理的工具,可以在远程计算机上执行命令,同时也可以通过 SSH 和 WinRM 等协议进行管理。
Playbook
在 Ansible 中,playbook 是一种定义要在目标主机上执行的一系列任务和操作的文件。它可以用来自动化常见的 IT 工作流程,例如软件配置、部署、编排和管理。
每个 playbook 都是一个 YAML 文件,其中包含一组任务列表。任务是 Ansible playbook 的最基本的组成部分,表示要在目标主机上执行的操作。每个任务都包括一个或多个动作,这些动作定义了要执行的具体操作,例如运行命令、复制文件、安装软件包等。
除了任务和动作,playbook 还包括变量、条件语句、循环和角色等高级特性,可以使 playbook 更加灵活和可重用。
---
- hosts: all
tasks:
- name: "remove old files"
shell: rm -rf /home/hf/new-version
- name: "mkdir"
shell: mkdir -p /home/hf/new-version
- name: "copy files"
copy:
src: /home/semaphore/service.tar
dest: /home/hf/new-version
owner: hf
group: hf
mode: 0644
- name: "tar xzvf"
shell: tar xzvf service.tar
args:
chdir: /home/hf/new-version
- name: "kill"
shell: kill -9 $(pgrep -f 'my_app.py')
register: result
failed_when: result.rc > 0
- name: "pip install"
shell: /home/opt/miniconda3/bin/pip3 install -r requirements.txt
args:
chdir: /home/hf/new-version/service
- name: "start nohup"
shell: nohup /home/opt/miniconda3/bin/python3 my_app.py > nohup.out 2>&1 &
args:
chdir: /home/hf/new-version/service/src
几个需要注意的点:
-
kill执行完后没有返回结果,需要加failed_when,否则会报错non-zero return code
-
执行pip3和python3需要指定具体路径,否则会报pip3找不到、或者ModuleNotFoundError