Jenkins基础:获取Jenkins-Crumb的错误信息与对应方法

这篇文章memo一下使用Jenkins 2.176.1 LTS版本获取Jenkins-Crumb所碰到的问题与对应方法。

现象

Jenkins启动之后,使用API方式获取Jenkins-Crumb,碰到了如下错误信息提示

liumiaocn:jenkins liumiao$ jenkins_host_url=http://localhost:32002
liumiaocn:jenkins liumiao$ user_passwd="root:liumiaocn"
liumiaocn:jenkins liumiao$ curl -u $user_passwd ${jenkins_host_url}'/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)' 
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>Error 404 Not Found</title>
</head>
<body><h2>HTTP ERROR 404</h2>
<p>Problem accessing /crumbIssuer/api/xml. Reason:
<pre>    Not Found</pre></p><hr><a href="http://eclipse.org/jetty">Powered by Jetty:// 9.4.z-SNAPSHOT</a><hr/>

</body>
</html>
liumiaocn:jenkins liumiao$

上述代码是在4个月前使用相同的镜像启动的Jenkins容器获取Jenkins-Crumb的代码,毫无差别。镜像和获取方式都没有问题,为什么出现问题了呢?

原因

原因是docker-compose.yml文件发生了变化

liumiaocn:jenkins liumiao$ cat docker-compose.yml 
version: '2'

services:
  # jenkins service based on Jenkins LTS version
  jenkins:
    image: liumiaocn/jenkins:2.176.1
    ports:
      - "32002:8080"
      - "50000:50000"
    environment:
      - JENKINS_ADMIN_ID=root
      - JENKINS_ADMIN_PW=liumiaocn
      - JENKINS_MODE=master
      - JAVA_OPTS=-Djenkins.install.runSetupWizard=false
    volumes:
      - ./data/:/data/jenkins
      - /var/run/docker.sock:/var/run/docker.sock
    restart: "no"
liumiaocn:jenkins liumiao$ 

删除JAVA_OPTS和sock的映射对应(此两项设定是做别的验证中修改的内容)即和之前的环境才真正做到了一致。

liumiaocn:jenkins liumiao$ cat docker-compose.yml 
version: '2'

services:
  # jenkins service based on Jenkins LTS version
  jenkins:
    image: liumiaocn/jenkins:2.176.1
    ports:
      - "32002:8080"
      - "50000:50000"
    environment:
      - JENKINS_ADMIN_ID=root
      - JENKINS_ADMIN_PW=liumiaocn
      - JENKINS_MODE=master
    volumes:
      - ./data/:/data/jenkins
    restart: "no"
liumiaocn:jenkins liumiao$

结果确认

使用上述docker-compose.yml文件再次启动Jenkins,确认Jenkins-Crumb的信息,发现已经没有问题了。

liumiaocn:jenkins liumiao$ jenkins_host_url=http://localhost:32002
liumiaocn:jenkins liumiao$ user_passwd="root:liumiaocn"
liumiaocn:jenkins liumiao$ jenkins_crumb=`curl -u $user_passwd ${jenkins_host_url}'/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)' 2>/dev/null`
liumiaocn:jenkins liumiao$ echo $jenkins_crumb
Jenkins-Crumb:2e1220dce82f34354ab2416bc4ef2c84
liumiaocn:jenkins liumiao$ 

追加说明

JAVA_OPTS=-Djenkins.install.runSetupWizard=false
增加此行的原因:Jenkins首次启动时插件安装选择的页面跳过,正是此行的增加导致了本文的问题出现

- /var/run/docker.sock:/var/run/docker.sock
为了解决容器启动的Jenkins中进行镜像生成等操作,不然诸如docker.build等操作都会报错,此行并不会导致问题出现

总结

原因到底是什么并不是这个memo的意义,想表述的是在做DevOps实践中,经常强调的环境的一致性。镜像还是那个镜像,使用方式也没有变化,启动的配置略有不同则发生了使用上的问题,而如果是手工的配置,没有以docker-compose.yml这样明示的将修改的问题显示地表现出来的情况呢?我们快速地定位问题的原因所花的时间自然会大幅度的上升。

淼叔 CSDN认证博客专家 神经网络 TensorFlow NLP
资深架构师,PMP、OCP、CSM、HPE University讲师,EXIN DevOps Professional与DevOps Master认证讲师,曾担任HPE GD China DevOps & Agile Leader,帮助企业级客户提供DevOps咨询培训以及实施指导。熟悉通信和金融领域,有超过十年金融外汇行业的架构设计、开发、维护经验,在十几年的IT从业生涯中拥有了软件开发设计领域接近全生命周期的经验和知识积累,著有企业级DevOps技术与工具实战。
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页