ansible使用【4】-- 踩坑指南--Jenkins下的拉取的ansible-playbook.yaml显示成功,实际失败

发布时间 2023-11-20 10:27:01作者: 山雨欲來風滿楼

我本意想用git管理ansible-playbook.yaml的

比如,我有一个setup.yaml的剧本,里面写了如何创建环境。

例如:

- hosts: webservers
  become: yes

  tasks:
    - name: Create a directory
      file:
        path: /home/liqi/b888/z888
        state: directory
        mode: '0755'

    - name: Copy tools directory
      synchronize:
        src: /home/liqi/mini_common/
        dest: ~/liqi_test
      become: no

我的,执行过程是,Jenkins拉取git代码, 然后执行这个setup.yaml。

且我的git代码仓库还有其他的执行脚本。

我的Jenkins的执行命令是:

# 部分jenkins的pipeline
...
stages {

        stage('Pull Code') {
            steps {
                dir('/home/liqi/JenkinsTest/test_robot')  {
                    git branch: 'liqi_dev_windows', credentialsId: 'cdac3cfe-6e45-437e-aa4d-3bfb6147894531xxx', url: 'http://192.168.9.30/liqi/test_robot.git'
                }
            }
        }

        stage('Run Ansible Playbook set up') {
            steps {
                script {
                    def ansiblePath = '/usr/bin/ansible'
                    env.PATH = "${ansiblePath}:${env.PATH}"
                    // 使用sh来执行Ansible的Playbook
                    sh 'ansible-playbook -i /home/liqi/JenkinsTest/test_robot/host.ini /home/liqi/JenkinsTest/test_robot/setup_env.yaml --check -v'
                }
            }
        }

 

我发现每次执行都失败,无论是创建目录,还是拷贝文件等。显示成功,却执行失败。

显示成功:

实际失败:

目标49.107上没有这个b888的文件

 

解决方式:

后来我尝试把ansible-playbook放到外面,其他不动,就可以成功。

估计,是玄学??? 

 

 

家目录下执行的:

 

失败的是:

ansible-playbook -i JenkinsTest/test_robot/host.ini JenkinsTest/test_robot/setup_env.yaml

成功的是:

ansible-playbook -i JenkinsTest/test_robot/host.ini ./set2.yaml

 

我后续计划把ansible-playbook,放到单独一个git里。

 

【最新消息】

我知道了,我失败是因为增加了这个 --check 参数,应该是我的host.ini,写的不好。导致出现了,跳过的情况!