Jenkins将文件复制到宿主机,构建出现错误解决办法

2023年9月13日 242点热度 0人点赞 0条评论
Started by remote host 102.13.25.88
Obtained Jenkinsfile from git git@gitee.com:xiangchuans/hao-vue.git
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 21: Expecting "interface java.util.List" but got "123" of type class java.lang.String instead @ line 21, column 26.
         sshagent('123'){
                            ^
1 error
	at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:309)
	at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1107)
	at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:624)
	at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:602)
	at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:579)
	at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:323)
	at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:293)
	at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovySandbox$Scope.parse(GroovySandbox.java:163)
	at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.doParse(CpsGroovyShell.java:190)
	at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.reparse(CpsGroovyShell.java:175)
	at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.parseScript(CpsFlowExecution.java:580)
	at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.start(CpsFlowExecution.java:526)
	at org.jenkinsci.plugins.workflow.job.WorkflowRun.run(WorkflowRun.java:335)
	at hudson.model.ResourceController.execute(ResourceController.java:101)
	at hudson.model.Executor.run(Executor.java:442)

出现错误的原因是在sshagent('123')中提供了一个字符串 '123',而期望的是一个列表的接口 'java.util.List'。

sshagent 步骤需要一个存放凭据的列表作为参数,而不是直接的字符串。你可能需要更正代码,确保提供的是正确的凭据(例如 SSH 凭据在 Jenkins 环境中的正确 ID 或凭据名称)。

sshagent(['my-ssh-credentials']) {
    // 执行相关的命令
    sh "scp index.html root@172.20.202.102:/root"
}

确保将正确的凭据 ID 或凭据名称替换为['my-ssh-credentials'],这样才能成功地使用 sshagent 步骤。

另外,请确保在使用 SSH 代理时,相关的 SSH 凭据已在 Jenkins Credential Manager 中正确配置,并且与 ['my-ssh-credentials'] 匹配。

------------------------------------------------

构建失败的原因是主机密钥验证失败。这是由于 SSH 客户端首次连接到远程主机时没有正确验证主机密钥引起的。
解决这个问题的方法是让 Jenkins 主机信任远程主机的密钥。你可以有以下几个选择:

一、手动进行一次 SSH 连接:通过使用与 Jenkins 代理节点相同的用户在 Jenkins 主机上手动执行一次 SSH 连接,以触发主机密钥的验证。这通常会在首次连接时提示你接受主机密钥并将其添加到已知主机列表中。

二、使用 ssh-keyscan 命令:在 Jenkins 流水线的 sshagent 步骤之前添加一个步骤,使用 ssh-keyscan 命令来获取远程主机的密钥并将其添加到已知主机列表。

stage('获取远程主机密钥') {
    steps {
        sh "ssh-keyscan 172.20.202.102 >> ~/.ssh/known_hosts"
    }
}

上面的示例中,172.20.202.102 是你连接的远程主机的 IP 地址。你可以根据实际情况进行修改。

三、手动添加主机密钥:在 Jenkins 主机上手动将远程主机的密钥添加到 Jenkins 用户的 ~/.ssh/known_hosts 文件中。打开 Jenkins 用户的 ~/.ssh/known_hosts 文件,然后将远程主机的公钥粘贴到文件中。保存文件后,重启 Jenkins 服务。

请注意,在使用上述方法之前,请确保你是在安全的网络环境中进行操作,并且正在连接到受信任的远程主机。

小小调酒师

此刻打盹,你将做梦; 此刻学习,你将圆梦。 个人邮箱:shellways@foxmail.com

文章评论