我有一个由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
应该有所帮助。
我还错过了什么?
1条答案
按热度按时间cngwdvgl1#
我认为可以使用下面的代码块在主机级别定义这一点:
在具有以下代码块的任务中,优先于您尝试成为user_a: