Jenkins的golang爬虫问题
昨天在Jenkins中突然开始出现的MalformedURLException。
java.net.MalformedURLException: no protocol: /dl/go1.14.2.linux-amd64.tar.gz
at java.net.URL.<init>(URL.java:593)
at java.net.URL.<init>(URL.java:490)
at java.net.URL.<init>(URL.java:439)
at org.jenkinsci.plugins.golang.GolangInstaller.performInstallation(GolangInstaller.java:57)
at hudson.tools.InstallerTranslator.getToolHome(InstallerTranslator.java:72)
at hudson.tools.ToolLocationNodeProperty.getToolHome(ToolLocationNodeProperty.java:109)
at hudson.tools.ToolInstallation.translateFor(ToolInstallation.java:206)
at org.jenkinsci.plugins.golang.GolangInstallation.forNode(GolangInstallation.java:44)
at org.jenkinsci.plugins.golang.GolangInstallation.forNode(GolangInstallation.java:22)
at org.jenkinsci.plugins.workflow.steps.ToolStep$Execution.run(ToolStep.java:152)
at org.jenkinsci.plugins.workflow.steps.ToolStep$Execution.run(ToolStep.java:133)
at org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution$1$1.call(SynchronousNonBlockingStepExecution.java:49)
at hudson.security.ACL.impersonate(ACL.java:260)
at org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution$1.run(SynchronousNonBlockingStepExecution.java:46)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:748)
Finished: FAILURE
我对此感到困惑,尝试了很多方法但效果并不明显。
直到今天,在网上搜索时找到了以下文章:
https://qiita.com/cpp0302/items/27c1747bc3f9d753eb64
由于这正好是问题的本质,我们也以同样的方式处理了它。
这是因为根据下面所写的,这是由于golang的规范更改而导致jenkins的爬虫无法适应。
https://github.com/jenkins-infra/crawler/pull/89的中文释义:
这是一个Jenkins基础设施中的爬虫项目,链接为https://github.com/jenkins-infra/crawler/pull/89。
https://github.com/golang/website/commit/58a31798e86f7e67791de8767e8353f734576199#diff-8dfde61e35bbbe9e94ea52fe96273aa9L280-R280的中文释义:
这是一个Golang官方网站项目中的提交记录,链接为https://github.com/golang/website/commit/58a31798e86f7e67791de8767e8353f734576199#diff-8dfde61e35bbbe9e94ea52fe96273aa9L280-R280。
当这个爬虫发生变化时,会产生怎样的反应呢?我对自动下载的机制还不太清楚。
在“管理Jenkins > 全局工具配置”中,您可以编辑您的Go安装程序,将“从golang.org安装”安装程序替换为“从.tar.gz安装”安装程序,然后提供相应的下载URL和子目录(可能是“go”)。
作为解决方法,尽管使用了上述方法,但在日语版本中,是指“顶部→左侧面板的Jenkins管理→全局工具配置”的go栏。
哎呀,最近我完全不熟悉这些,所以完全迷失了方向(笑)。
此外,如果需要进行设置,应该放在下载目录的直接下级。(通常情况下,除非是进行全新的构建,应该是已经存在的。)
换句话说,应该是${JENKINS_HOME}/tools/org.jenkinsci.plugins.golang.GolangInstallation/(已经在Jenkins中设置的名称),
应该就可以了。
填補的缺陷
我之前把1.14版本的Golang安裝在${JENKINS_HOME}/tools/org.jenkinsci.plugins.golang.GolangInstallation/1.14目錄下。
[jenkins]$ ls -ltr
合計 204
-rw-r--r-- 1 jenkins jenkins 397 4月 9 04:15 SECURITY.md
-rw-r--r-- 1 jenkins jenkins 1607 4月 9 04:15 README.md
-rw-r--r-- 1 jenkins jenkins 1303 4月 9 04:15 PATENTS
-rw-r--r-- 1 jenkins jenkins 1479 4月 9 04:15 LICENSE
-rw-r--r-- 1 jenkins jenkins 90098 4月 9 04:15 CONTRIBUTORS
-rw-r--r-- 1 jenkins jenkins 1339 4月 9 04:15 CONTRIBUTING.md
-rw-r--r-- 1 jenkins jenkins 55383 4月 9 04:15 AUTHORS
-rw-r--r-- 1 jenkins jenkins 26 4月 9 04:15 robots.txt
-rw-r--r-- 1 jenkins jenkins 5686 4月 9 04:15 favicon.ico
-rw-r--r-- 1 jenkins jenkins 8 4月 9 04:15 VERSION
drwxrwxr-x 2 jenkins jenkins 312 4月 30 18:05 api
drwxrwxr-x 2 jenkins jenkins 29 4月 30 18:05 bin
drwxrwxr-x 3 jenkins jenkins 18 4月 30 18:05 lib
drwxrwxr-x 7 jenkins jenkins 4096 4月 30 18:05 doc
drwxrwxr-x 12 jenkins jenkins 165 4月 30 18:05 misc
drwxrwxr-x 6 jenkins jenkins 76 4月 30 18:05 pkg
drwxrwxr-x 47 jenkins jenkins 4096 4月 30 18:05 src
drwxrwxr-x 23 jenkins jenkins 12288 4月 30 18:05 test
因为go二进制文件位于bin文件夹下,所以最初设置了${JENKINS_HOME}/tools/org.jenkinsci.plugins.golang.GolangInstallation/1.14/bin,结果出现了以下错误。
[xxxx-THAL7GIC7EP2KG363RGLDNNRHS6T5VIFM7P5FDFXNXB5U4DDPX3Q] Running shell script
+ go env -w CGO_ENABLED=0
/jenkins_home/workspace/xxx-THAL7GIC7EP2KG363RGLDNNRHS6T5VIFM7P5FDFXNXB5U4DDPX3Q@tmp/durable-27fdf3a0/script.sh: 行 2: go: コマンドが見つかりません
填補2
有两个分支,一个是发生,一个是不发生。
可能有爬取的条件,但我还没有深入调查。