问题描述
在尝试使用 Python 脚本外部构建 Jenkins 任务时,出现了 403 forbidden 错误,但其他 GET 请求的 API 正常工作。以下是用户提供的 Python 代码片段和 Jenkins 详情。
Python 代码片段:
j = jenkins.Jenkins('http://localhost:8080/login?from=%2F', 'admin', 'admin@123')
j.get_jobs()
print(j.jobs_count())
print(j.get_jobs())
j.build_job('demo1')
Jenkins 详情:
– 用户可以从 UI 成功创建和构建作业。
– Jenkins 版本为 2.237。
– 登录的用户可以执行任何操作,CSRF 保护已禁用。
– 与用户一起使用相同的脚本和 Jenkins 版本的朋友可以成功构建任务。
解决方案
方案1
首先,根据 Jenkins 官方建议(Jenkins 版本 > 2.2xx),您可以为用户创建一个 API 令牌,然后在脚本中使用该令牌来触发 Jenkins 任务。
以下是进一步的说明和链接以供参考:
方案2
在一些情况下,可能会遇到 Python 环境或库版本与朋友的不同,导致脚本在朋友的环境中可以正常工作,但在您的环境中出现问题。如果您的脚本仍然无法正常工作,可以考虑尝试以下步骤:
-
检查 Jenkins 版本:确保您的 Jenkins 版本与朋友的版本相同。如果版本不同,可能存在某些差异。
-
升级 Jenkins 插件:确保使用的 Jenkins 插件版本是最新的。有时旧的插件版本可能存在问题,通过升级插件可能会解决问题。
-
检查 Python 环境:确认您的 Python 环境与朋友的相似,包括使用的 Jenkins Python 库版本等。
-
尝试其他网络配置:在某些情况下,网络配置可能会导致访问问题。您可以尝试使用代理或调整网络配置以查看是否对问题有影响。
以上方案中,第一种方法是官方推荐的最佳做法,可以尽量保证脚本的稳定性和可维护性。如果仍然存在问题,可以尝试第二种方法来排除环境或配置相关的问题。