持续集成 jenkins v2.229 版本,无法勾选 “跨站请求伪造保护”

蓝蓝 · 2020年04月08日 · 最后由 蓝蓝 回复于 2020年07月02日 · 3871 次阅读

如题:

就是在 Manage jenkins -> Configure Global Security -> 跨站请求伪造保护 这个没有勾选框啊,咋办??

无法勾选这会导致,使用 jenkinsapi 调用,build_job 时会报错

jenkinsapi.custom_exceptions.JenkinsAPIException: Operation failed. url=http://ci.test.com/jenkins/job/test_job_name/build, data={'json': '{"parameter": [], "statusCode": "303", "redirectTo": "."}'}, headers={'Content-Type': 'application/x-www-form-urlencoded', 'Jenkins-Crumb': '42a52abd17c6bf259171d23c5ab84018cfd024f1d319fe0d249c2955680382d5'}, status=403, text=b'<!doctype html><html lang="en"><head><title>HTTP Status 403 \xe2\x80\x93 Forbidden</title><style type="text/css">h1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} h2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} h3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} body {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} b {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} p {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;} a {color:black;} a.name {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 403 \xe2\x80\x93 Forbidden</h1><hr class="line" /><p><b>Type</b> Status Report</p><p><b>Message</b> No valid crumb was included in the request</p><p><b>Description</b> The server understood the request but refuses to authorize it.</p><hr class="line" /><h3>Apache Tomcat/8.5.34</h3></body></html>'

触发构建脚本:

def build_job(job_name = "test_job_name"):
    from jenkinsapi.utils.crumb_requester import CrumbRequester
    j = Jenkins(URL, username=JENKINS_USER, password=JENKINS_PASSWORD, requester=CrumbRequester(username=JENKINS_USER, password=JENKINS_PASSWORD, baseurl=URL))
    # j = Jenkins(URL, username=JENKINS_USER, password=JENKINS_PASSWORD)
    # j[job_name].invoke()
    print(j.build_job(job_name))
    return True

我另外一个 jenkins v2.150.3 是可以的,有勾选框

有哪位大佬知道肿么回事么?

共收到 6 条回复 时间 点赞

有人木有,现在我只能用令牌方式触发构建

蓝蓝 回复

我也刚遇到这个问题了,还没找到解决办法啊

我也遇到了
有没有办法解决啊

我今天也遇到这个问题了,我使用 Java 请求 jenkins api 操作的,我的解决方案是:调用.build() 方法的时候增加了一个参数,具体如下,仅参考;

我的 jenkins 版本也是没有那个跨域请求的选择框,也下载了 cros 相关的插件,但是都没有解决,后来看到有人调用的方法和自己的不一样,然后就看了下 build 这个方法的 api,发现有 crub 的参数,设置上试了下,可以了。

JenkinsServer jenkinsServer =
                new JenkinsServer(
                        new URI("http://127.0.0.1:8080/jenkins/"),
                        "userNameXXX",
                        "poword******");
        Map<String,String>paramMap = Maps.newHashMap();
        paramMap.put("branch_name","master");
        paramMap.put("serverName","92-172.168.2.92");

        //jenkinsServer.getJob("demo").build(paramMap);
        jenkinsServer.getJob("demo").build(paramMap,true);
回复

感谢,这个正解。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册