jenkins 管道中的此模块需要 boto3 和 botocore

boto3 and botocore are required for this module in jenkins pipeline

我正在尝试通过 jenkins groovy 脚本 运行 ansible 剧本,但不断收到错误: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

点:

 which pip
/home/john/.local/bin/pip

博托:

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

我还错过了什么配置?

经过几天的努力,终于使用以下步骤解决了我的问题:

  1. 为 python、boto 和 ansible 创建了虚拟环境

  2. 编辑 ansible 清单文件以将解释器指向 python 而不是 /usr/bin/python

    sudo pip install virtualenv sudo pip 安装 boto botocore 来源 ansible_vEnv/bin/activate

在ansible inventory中设置如下:

[localhost]
localhost ansible_python_interpreter=python
  1. 将 playbook 命令指定为 ansible-playbook -c local dir/test.yaml

注意:确保在 yaml 文件中使用 boto 而不是 boto3:

- hosts: localhost
  gather_facts: no
  tasks:
  - name:
    pip:
      name: boto // here
      state: present

将解释器指向 python 实际上会从我们的隔离环境中获取 python,即我们在步骤 2 中创建的虚拟环境。

此外,我确实以 root 身份安装了 ansible,使用:

  1. sudo su -
  2. 卸载了使用 apt-get
  3. 安装的现有 ansible
  4. 使用pip install ansible
  5. 安装ansible
  6. 在全局工具配置中将 Jenkins 中的路径设置为 /usr/bin for ansible plugin