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

几个需要注意的点:

  1. kill执行完后没有返回结果,需要加failed_when,否则会报错non-zero return code

  2. 执行pip3和python3需要指定具体路径,否则会报pip3找不到、或者ModuleNotFoundError