Jenkins pipeline运行Ansible Playbook报boto3缺失但已安装的配置排查
你当前的boto3是安装在john用户的本地Python库路径下,Jenkins运行任务时的执行用户、Python解释器匹配、环境变量三个维度都不匹配,才会出现明明装了还报缺失的问题,调整步骤如下:
- 解决Python解释器和boto3安装路径匹配问题
你现在在命令行用-e ansible_python_interpreter=$(which python)把解释器覆盖成了/usr/bin/python,但你的boto3是装在/home/john/.local/lib/python3.6/site-packages/下,属于john用户的私有库,全局/usr/bin/python默认不会加载这个路径下的包,两种解决方法二选一:- 给全局的
/usr/bin/python装boto3:执行sudo /usr/bin/python -m pip install boto3==1.20.3 botocore==1.23.3,全局安装后所有用户调用/usr/bin/python都能读到boto3 - 把ansible的Python解释器指定为你装了boto3的对应Python环境,保证解释器和库路径匹配
- 给全局的
- 去掉冲突的配置
你的inventory里已经给localhost配了ansible_python_interpreter=/usr/local/bin/python,但命令行又用-e参数覆盖成了$(which python),两个配置冲突,建议统一:要么直接删命令行里的-e ansible_python_interpreter=$(which python)参数,走inventory的配置,要么保证命令行指定的解释器确实已经装了boto3 - 适配Jenkins运行环境
Jenkins执行任务时默认用的是jenkins用户,不是john用户,所以你如果用john用户的私有库,要么给Jenkins任务指定运行用户为john,要么在执行ansible命令前手动加PYTHONPATH环境变量,参考命令如下:PYTHONPATH=/home/john/.local/lib/python3.6/site-packages ansible-playbook -c local \ -i localhost, \ -e env="'${ENV}'" \ -e image="'${IMAGE_NAME}'" \ -e version="'${BUILD_NUMBER}'" \ infra/test.ansible.yaml - 快速验证方法
你可以先在Jenkins任务的shell逻辑最前面加两行调试命令,确认执行环境的包情况:
看输出的用户是不是你预期的、Python路径对不对、import boto3会不会报错,能快速定位问题。whoami which python python -c "import boto3; print(boto3.__file__)"
内容的提问来源于stack exchange,提问作者kittu
相关产品推荐
相关产品推荐

