Jenkins ansible-plugin运行playbook报错找不到ansible.kubernetes-modules角色
问题根因分析
- 核心问题为Ansible角色查找路径与执行用户不匹配:你本地手动执行playbook时使用的是oassaghir用户上下文,
ansible.kubernetes-modules角色安装在该用户对应的Ansible搜索路径下(通常为~/.ansible/roles/、公共系统路径或项目本地roles目录);但Jenkins服务默认以jenkins系统用户运行,报错信息已明确列出Jenkins用户的角色搜索路径为/var/lib/jenkins/workspace/ansible-demo/roles:/var/lib/jenkins/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles,该路径下未安装目标角色。 - 补充说明:你在playbook中配置的
become_user: oassaghir仅作用于playbook任务执行阶段,Ansible加载角色的动作发生在启动playbook的初始阶段,此时仍使用启动命令的Jenkins用户上下文,因此无法读取oassaghir用户下的角色文件。
你可执行以下命令验证该问题:
sudo -u jenkins ansible-galaxy list | grep ansible.kubernetes-modules
若输出为空即可确认角色未安装在Jenkins用户的搜索路径中。
解决方案
方案1:将角色安装到公共或Jenkins用户专属路径
安装到所有用户均可访问的公共路径:
sudo ansible-galaxy install ansible.kubernetes-modules -p /usr/share/ansible/roles/
或仅安装到Jenkins用户的专属角色路径:
sudo -u jenkins ansible-galaxy install ansible.kubernetes-modules
方案2:将角色纳入项目代码仓库
将ansible.kubernetes-modules角色文件放到项目的roles/目录下,与playbook一同提交到代码仓库,Jenkins拉取代码后可直接在项目工作目录下找到角色,无需在Jenkins节点额外配置。
方案3:调整Jenkins Ansible插件执行参数
在Jenkins的Ansible构建步骤的额外参数栏添加--become --become-user oassaghir,让ansible-playbook命令启动时就切换到oassaghir用户,加载角色时使用该用户的路径配置。需提前配置jenkins用户可免密切换到oassaghir用户执行命令的sudo权限。
内容的提问来源于stack exchange,提问作者ossama assaghir
相关产品推荐
相关产品推荐

