Jenkins使用中的一些问题处理

如何获取凭据密码

因为需要部署一台新的服务器,有些项目需要迁移过来,但是在原服务器上配置的Jenkins凭据密码已经忘记了,也没找到记录,所以需要从原来的Jenkins里获取密码。

放狗搜到腾讯云文档的这篇《jenkins获取凭据密码的方法》,试了一下确实可以:

打开Jenkins的“系统管理”-“脚本命令行”,输入以下脚本:

com.cloudbees.plugins.credentials.SystemCredentialsProvider.getInstance().getCredentials().forEach{
  it.properties.each{prop, val->println(prop+' = "'+ val+'"')};
  println("-----------------------");
}

注意,上面的脚本较原文有所修改,因为凭据多的时候原脚本有bug,不会显示分隔线,导致分不清哪个密码是哪个账号的。这里修复了这个bug。

如何配置Gradle代理

因为需要在一台内网服务器上的Jenkins里用Gradle构建项目,但是在Jenkins里配置代理无效,Gradle仍然无法下载依赖包。

先是在Jenkins的系统管理>System里配置了HTTP proxy config>setup,指定代理的地址和端口,这个代理只对Jenkins本身有效,可以下载安装Gradle。

顺便说一下在Jenkins里下载安装Gradle的配置:

在Jenkins的系统管理>全局工具配置里的Gradle安装>新增Gradle,指定一个name例如为Gradle,再指定自动安装>Gradle xxx,其中xxx为版本号。

后来又搜到一个说法是需要配置环境变量,在系统管理>全局属性>环境变量里新增一对键值:name为GRADLE_OPTS,值为-Dhttp.proxyHost=<host> -Dhttp.proxyPort=<port>,其中为你的代理地址和端口。

但是仍然不行。

正确的配置应该是这样:

在项目的配置里找到Build steps>Invoke Gradle Script,在高级配置里增加System propertiesProject properties:

http.proxyHost=<host>
http.proxyPort=<port>
https.proxyHost=<host>
https.proxyPort=<port>

这样Gradle在构建的时候就可以通过代理下载了。

如何导出导入job

因为需要将一个Jenkins里的任务复制到另一个Jenkins里,但是又懒得手工重配。问了ChatGPT半天,在错误的道路上越走越远,最后还是老狗靠谱,给了一个SO的回答Export/import jobs in Jenkins解决了。

首先到Jenkins的“系统管理”-“Jenkins命令行接口”(在靠下面的“工具和动作”里),在页面的第一行可以找到jenkins-cli.jar的下载链接,把它下载到本地,然后使用如下的命令行操作:

java -jar jenkins-cli.jar -s http://<your-jenkins-server-url> -auth "<user>:<password>" get-job <jobname> > <jobname>.xml

其中<your-jenkins-server-url>是你的jenkins服务器地址,不过可能是因为安全原因,这个地址必须是本地地址,如果要操作远程服务器上的Jenkins,请用SSH tunnel映射到本地,否则会报错。<user>:<password>是用户名密码,用双引号是防止密码里有特殊字符。<jobname>是任务名。

这样就可以导出一个XML格式的任务配置文件。不过实际上这个文件可以直接在浏览器里下载:

http://<your-jenkins-server-url>/job/<jobname>/config.xml

导入就只能用命令行了:

java -jar jenkins-cli.jar -s http://<your-jenkins-server-url> -auth "<user>:<password>" create-job <jobname> < <jobname>.xml

注意导出导入XML文件前面的管道符号“>”和“<”。

推送到[go4pro.org]