我需要在 jenkins 中禁用 CSRF 保护,默认情况下启用该保护。问题是在容器化之后,当我启动一个包含 jenkins 的新容器时,它会抛出“没有有效的面包屑”错误。
我目前正在使用此 cmd 来打开 jenkins 应用程序。
/usr/bin/java -server -Djava.net.preferIPv4Stack=true -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration=false -jar /usr/share/jenkins/jenkins.war --webroot=/var/cache/jenkins/war --httpPort=9090 --ajp13Port=-1
答案1
要禁用 CSRF,可以使用 groovy 来完成,打开“管理 Jenkins”/“脚本控制台”
import jenkins.model.Jenkins
def instance = Jenkins.instance
instance.setCrumbIssuer(null)
答案2
我只是添加
-Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true
所以完整的命令是:
docker run --restart=always --name jenkins --add-host="xxxx:xx" --add-host="updates.jenkins-ci.org:7.223.199.227" --add-host="updates.jenkins.org:7.223.199.227" -u root -d -p 8080:8080 -p 50000:50000 -v /root/jenkins-data:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -e JAVA_OPTS="-Duser.timezone=Asia/Shanghai -Dhudson.model.DownloadService.noSignatureCheck=true -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true" docker.io/jenkins/jenkins:lts
答案3
添加到@hoefling,取消选择“防止跨站请求伪造”参数后。保存。
转到“管理 Jenkins”,然后单击“从磁盘重新加载配置”。
答案4
不能 100% 确定您的用例,但您始终可以选择使用创建新的 Docker 映像Dockerfile
并运行该映像。在 中Dockerfile
,您可以使用环境变量设置系统属性JAVA_OPTS
。
FROM jenkins/jenkins:latest
ENV JAVA_OPTS -Djava.net.preferIPv4Stack=true -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration=false