上一篇提到:
删除后面的用户验证部分,错误还是同样发生。说明还未进行用户验证,在http://localhost:8089/cli这个端口访问时出问题,现在还在排查。
命令是这样的:
java -jar jenkins-cli.jar -s http://localhost:8080/ --username XXX --password XXX
接下来,猜想未验证用户的原因可能是jar包本身没有--username和--password参数,导致后面的部分被忽略,于是更新jar包,果然在新jar包在java7下无法运行,然后升级java7->java8,成功。
排查问题的关键在于删除username参数同样得到403错误,说明后面部分未被验证。
这个问题解决,接下来需要使用非UI形式创建jenkins-job,考虑最简单的配置文件方法,即写好需要的config.xml文件,然后复制到对应的jenkins_home文件夹下,jenkins启动后会自行读取生成job。
docker cp指令拷贝文件到container,但是发现拷贝进入container的文件所有者和群组变成了root:root,google后发现jenkins2确实会将拷入文件所有者和群组默认更改,那么在保证安全,不转root用户的条件下,无法使用docker cp完成工作。
咨询林老师后我们采用curl请求的方式发送config文件:
curl -X POST http://192.168.99.100:8088/createItem?name\=TestCreate --user twars:twars --data-binary "@config.xml" -H "Content-Type:text/xml"
发现jenkins2下权限不足,google后发现:
Jenkins by default has CSRF Protection enabled which prevents one-click attacks.you need to obtain the crumb from/crumbIssuer/api/xml,using your credentials and include it into your request.
需要先得到crumb token然后进行请求,但是所有请求都是如此,所以无法先用请求的方式获取crumb token,于是此路不通。
最后还是采用volume映射的方式,pair成功,但是在我自己的云上,因为默认使用root权限创建docker,所以文件映射后还是出现权限问题,接下的工作就是创建普通用户再走一遍。
网友评论