我正在尝试通过 jenkins groovy 脚本运行 ansible playbook 但不断收到错误:boto3 is required
。我已经安装了 boto3:
pip list boto | grep boto
boto3 1.20.3
botocore 1.23.3
我的库存为:
[localhost]
localhost ansible_connection=local ansible_python_interpreter=/usr/local/bin/python
Python:
which python
/usr/bin/python
pip:
which pip
/home/john/.local/bin/pip
boto:
find $HOME/.local -name 'boto3' -type d/home/john/.local/lib/python3.6/site-packages/boto3
版本:
pip --version
pip 21.3.1 from /home/john/.local/lib/python3.6/site-packages/pip (python 3.6)
python --version
Python 3.6.9
Ansible:
which ansible
/usr/bin/ansible
sh 文件中的剧本:
ansible-playbook -c local \
-e ansible_python_interpreter=$(which python) \
-i localhost, \
-e env="'${ENV}'" \
-e image="'${IMAGE_NAME}'" \
-e version="'${BUILD_NUMBER}'" \
infra/test.ansible.yaml
我还错过了什么配置?
最后,经过几天的努力,使用以下步骤解决了我的问题:
-
为 python、boto 和 ansible 创建虚拟环境
-
编辑 ansible inventory 文件将解释器指向 python 而不是/usr/bin/python
sudo pip 安装 virtualenv
sudo pip 安装 boto botocore
源 ansible_vEnv/bin/activate
在 ansible 库存中设置以下内容:
[localhost]
localhost ansible_python_interpreter=python
- 将剧本命令指定为
ansible-playbook -c local dir/test.yaml
注意:请确保您使用boto
在 yaml 文件中而不是 boto3 中:
- hosts: localhost
gather_facts: no
tasks:
- name:
pip:
name: boto // here
state: present
向口译员指出python
实际上会从我们的隔离环境(即我们在步骤 2 中创建的虚拟环境)中获取 python。
另外,我确实使用 root 身份安装了 ansible:
sudo su -
- 卸载了使用安装的现有 ansible
apt-get
- 使用ansible安装
pip install ansible
- 将 Jenkins 中的路径设置为
/usr/bin
全局工具配置中的ansible插件
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)