Ansible 是否提供一种在控制节点上构建/编译,然后部署到管理节点的方法?

Ansible 是否提供一种在控制节点上构建/编译,然后部署到管理节点的方法?

有什么办法Ansible在控制节点本地运行构建脚本,然后将生成的工件部署到各个管理节点?

如果我遗漏了什么,请告诉我,但我查看了文档shellcommandscript模块,并且每个模块似乎只允许在受管节点上执行。我真的很惊讶我找不到在控制节点上运行命令的方法。

也许这不属于 Ansible 的职责范围?你应该使用其他工具,比如Make进行构建,然后 Ansible 只处理将其复制到服务器?

答案1

对于 Ansible,要在不同的主机集上运行某事物,请尝试启动一个新的剧本。

- name: Build thing
  # localhost is the node running Ansible
  # By default, this already is connection local
  #   exec instead of ssh
  hosts: localhost
  
  tasks:
  # Assuming make based build scripts
  # make module reports not changed if nothing to do
  - make: 
      chdir: /home/builduser/source/thing/
    
    
- name: Install thing
  hosts: various
  
  tasks:
  - copy:
      # copy is an action plugin that handles the copy from localhost to remote for yoy
      src: /home/builduser/source/thing/output/thing.rpm
      dest: /tmp/thing.rpm

  # TODO Use custom repo for content management rather than copying one-off packages

  - package:
      name: /tmp/thing.rpm

尽管你可以在 CI/CD 管道或其他任何地方运行 Ansible,而且它可以运行任何你喜欢的东西,但 Ansible 作为构建系统并不出色。它不是面向工件的。

答案2

您可以创建一个简单的任务来调用make如下命令localhost

    - name: make an executable
      command: make
      tags: compile
      delegate_to: localhost
      connection: local
      run_once: True
      become: no

这将运行 make 命令并执行 Makefile 中的所有内容。然后在下一个任务中,您可以创建一个复制任务以将结果复制到托管节点。

相关内容