jenkins 可能出现将文件复制到远程示例的错误

kr98yfug  于 2023-02-21  发布在  Jenkins
关注(0)|答案(1)|浏览(434)

我有一个由Jenkins在服务器A上运行的Ansible剧本,它所做的只是将文件夹从服务器A复制到远程服务器B:
代码如下所示:

- hosts: "{{ lookup('env', 'REMOTE_HOST') }}"
  any_errors_fatal: true # fail all hosts if any host fails
  become: true
  become_method: sudo
  become_user: root
  gather_facts: yes

  vars:

    date_time: "{{ lookup('env', 'DATE_TIME') }}"
    version_main: 10.7
    sql_dir: "~/code/data/sql/sql_data/{{ version_main }}"
    remote_files_directory: "~/deploy/{{ version_main }}/{{ date_time }}/files"

  tasks:  

    - name: "Copy SQL files from {{ sql_dir }} to {{ remote_files_directory }} on the remote host"
      become: yes
      become_user: user_a
      ansible.builtin.copy:
        src: "{{ sql_dir }}"
        dest: "{{ remote_files_directory }}"
        remote_src: true

所有SQL文件都位于服务器A上user_a的主目录下:~/code/data/sql/sql_data/{{ version_main }},我想将它们复制到同一user_a主目录下的服务器B(REMOTE_HOST):~/deploy/{{ version_main }}/{{ date_time }}/files
变量REMOTE_HOST、DATE_TIME来自Jenkins。
使用remote_src: true时出现的错误是:

[0;31 fatal: [server_B]: FAILED! => {"changed": false, "msg": "Source /home/user_a/code/data/sql/sql_data/10.7/ not found"}

如果我设置remote_src: false,我会得到这个错误:

[0;31 fatal: [server_B]: FAILED! => {"changed": false, "msg": "Could not find or access '~/code/data/sql/sql_data/10.7' on the Ansible Controller. If you are using a module and expect the file to exist on the remote, see the remote_src option"}

我甚至添加了delegate_to: "{{ lookup('env', 'DEPLOY_DATAMONTH_HOST') }}",它没有任何区别。
不知何故,它找不出服务器A上的源文件文件夹,这是Ansible和Jenkins运行的地方。
这是我在服务器A上的Ansible版本。

ansible --version
ansible [core 2.13.7]

usser jenkins不能直接访问/home/user_a/code/data/sql/sql_data/10.7/,但jenkins可以sudo su - user_a,所以我认为

become: yes
become_user: user_a

应该有所帮助。
我还错过了什么?

cngwdvgl

cngwdvgl1#

我认为可以使用下面的代码块在主机级别定义这一点:

become: true
  become_method: sudo
  become_user: root

在具有以下代码块的任务中,优先于您尝试成为user_a:

become: yes
      become_user: user_a

相关问题