ProjectMatrixAuthorizationStrategy的CannotResolveClassException

时间:2017-06-22 06:10:23

标签: jenkins jenkins-plugins jenkins-pipeline

我试图通过添加旧机器的备份来恢复新机器上的jenkins。我用旧机器替换了新机器的jenkins主目录。当我启动jenkins时,它给了我这个错误。

Caused: java.io.IOException: Unable to read /var/lib/jenkins/config.xml

还有

 Caused: hudson.util.HudsonFailedToLoad
Caused: org.jvnet.hudson.reactor.ReactorException

调试信息是 ----调试信息----

message             : hudson.security.ProjectMatrixAuthorizationStrategy
cause-exception     : com.thoughtworks.xstream.mapper.CannotResolveClassException
cause-message       : hudson.security.ProjectMatrixAuthorizationStrategy
class               : hudson.model.Hudson
required-type       : hudson.model.Hudson
converter-type      : hudson.util.RobustReflectionConverter
path                : /hudson/authorizationStrategy
line number         : 11
version             : not available
-------------------------------

这就是我的config.xml的样子

<useSecurity>true</useSecurity>
  <authorizationStrategy class="hudson.security.ProjectMatrixAuthorizationStrategy">
    <permission>hudson.model.Hudson.Administer:visha</permission>
  </authorizationStrategy>

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:1)

这通常在未安装或启用提供授权策略的插件时发生。

确保matrix-auth插件已安装且未被禁用(matrix-auth.jpi.disabled中没有$JENKINS_HOME/plugins/文件(或类似)。

答案 1 :(得分:0)

如果新版本的插件与旧版本的Jenkins不兼容,则可能发生。建议将Jenkins升级到最新版本。

这是我的方法:

ssh jenkins "cd /tmp; wget https://updates.jenkins-ci.org/latest/jenkins.war"
ssh jenkins "cp /usr/share/jenkins/jenkins.war /tmp/jenkins.war.previous.version"
ssh jenkins "sudo systemctl status jenkins"
ssh jenkins "sudo cp /tmp/jenkins.war /usr/share/jenkins/"
ssh jenkins "sudo systemctl restart jenkins"

答案 2 :(得分:0)

通常,当 Jenkins 版本和插件版本不匹配时,就会出现这个错误。

最好的解决方案是始终保持更新的 Jenkins 和插件,或者根据 Jenkins 版本安装相应版本的 jenkins。

对于 centos、Redhat、amazon Linux,请按照以下步骤操作。

sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
yum update Jenkins. 

对于 ubuntu 机器,您可以按照 hit3k 给出的步骤进行操作。

cd /tmp; wget https://updates.jenkins-ci.org/latest/jenkins.war
cp /usr/share/jenkins/jenkins.war /tmp/jenkins.war.previous.version
sudo systemctl status jenkins
sudo cp /tmp/jenkins.war /usr/share/jenkins/
sudo systemctl restart jenkins