OCI 上的 Jenkins 代理节点无法部署

问题描述 投票:0回答:1

我正在尝试使用 Jenkins 控制器和 Oracle Cloud Infrastructure (OCI) 中的代理节点部署 Jenkins。我正在按照 Oracle 大学的分步说明和视频进行操作。但是,它无法部署代理节点。以下链接看起来与我遵循的说明非常相似:

https://reachmnadeem.wordpress.com/2019/08/22/jenkins-up-and-running-on-oracle-cloud-infrastruct-oci/

设置 OCI 插件后,我确保验证了我的凭据,并且 Jenkins 可以登录 OCI - 可以。然后,我设置了一个模板,并尝试通过依次单击“构建执行程序状态”和“配置 Oracle 云基础设施计算”来部署代理节点。

我的模板尝试部署 Linux 代理节点。

它显示以下消息:“已开始使用 1 个执行程序配置节点 oci-compute-8ddc4d29-cad9-46cd-b565-eed7611d6fc5” - 但它从未实际部署任何节点。

我已在本文末尾的 Jenkins 日志中列出了错误消息。

我发现我所做的和我遵循的说明之间的唯一区别是,说明似乎显示了旧版本的 Jenkins(新的云设置与配置系统位于同一页面上,而不是它自己的页面上。对于模板,它要求提供私钥和公钥,但 Jenkins 的当前版本仅要求私钥)。

如果您对如何排除故障或解决此问题有任何想法,请告诉我?当我搜索这个问题时,我没有找到很多有用的信息。

以下日志

Provisioning new cloud infrastructure instance
Dec 16, 2020 2:47:57 AM INFO com.oracle.bmc.core.ComputeClient setEndpoint
Setting endpoint to https://iaas.us-phoenix-1.oraclecloud.com
Dec 16, 2020 2:47:57 AM WARNING com.oracle.cloud.baremetal.jenkins.BaremetalCloud$ExplicitProvisioner call
Provisioned slave jenkins-192.168.0.11-8ddc4d29-cad9-46cd-b565-eed7611d6fc5 failed!
java.lang.Exception: Instance creation fails because: null
    at com.oracle.cloud.baremetal.jenkins.client.SDKBaremetalCloudClient.createInstance(SDKBaremetalCloudClient.java:237)
    at com.oracle.cloud.baremetal.jenkins.BaremetalCloud.provision(BaremetalCloud.java:230)
    at com.oracle.cloud.baremetal.jenkins.BaremetalCloud.access$100(BaremetalCloud.java:65)
    at com.oracle.cloud.baremetal.jenkins.BaremetalCloud$Provisioner.call(BaremetalCloud.java:222)
    at com.oracle.cloud.baremetal.jenkins.BaremetalCloud$ExplicitProvisioner.call(BaremetalCloud.java:382)
    at com.oracle.cloud.baremetal.jenkins.BaremetalCloud$ExplicitProvisioner.call(BaremetalCloud.java:372)
    at jenkins.util.ContextResettingExecutorService$2.call(ContextResettingExecutorService.java:46)
    at jenkins.security.ImpersonatingExecutorService$2.call(ImpersonatingExecutorService.java:80)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
jenkins jenkins-plugins oracle-cloud-infrastructure jenkins-agent
1个回答
1
投票

我找到了答案,所以我将其发布在这里。问题似乎是它不支持密码保护的 ssh 密钥。一旦我生成了一个不受密码保护的新密钥,日志中的 java null 错误就消失了,并且部署了从属节点。

我通过首先在从属节点所在的 OCI 内的 Oracle Linux 上再次安装 Jenkins 发现了这一点。这次测试的目的是看看原master和oci之间是否存在通信问题。我原来的主人不在 OCI 中,但我试图在 OCI 中启动奴隶。因此,如果主站现在也在 OCI 中并且与从站所在的同一子网中,则很容易消除两者之间的任何通信问题作为可能的原因。这次测试仍然没有部署从节点,所以不是原因。

然后我安装了AWS EC2插件,看看是否可以让从节点部署在AWS上。我试图排除 OCI 插件与我运行的 Jenkins 版本存在错误或兼容性问题。如果这不起作用,我将降级到旧版本的 Jenkins,因为我使用的是 Linux 发行版的最新可用版本。

安装 AWS-EC2 插件并尝试部署从属节点后,在验证我的凭据时出现错误,即使我确信它们是正确的。我查看了 Jenkins 日志,它显示了更详细的答案 - 它说“不支持密码保护的私钥”。这让我想知道这是否也是 OCI 的问题。所以我生成了一个不受密码保护的新 ssh-Key。从属节点创建现在可以在 AWS 和 OCI 云中使用。

为了确保这就是解决方案,我使用密码保护密钥重复了测试,但再次失败。但这一次我确实注意到 OCI 的错误日志现在也表示它不支持密码保护的密钥。我又回到了没有密码的那个,结果又成功了。这就是答案 - 不要使用受密码保护的 ssh 密钥。

我不太确定为什么这次我在日志中收到更详细的错误消息。我想我安装的AWS插件一定与此有关。事实并非如此,因为后来我在原来的 master 上安装了 AWS 插件,但它仍然给出了同样神秘的错误消息:Java = Null。

然后我注意到 Oracle Linux 上安装的 Jenkins 版本是 Jenkins 2.271 - 比我原来的 master(Debian/Ubuntu 发行版)上的版本更新 - 它的 Jenkins 版本为 2.263。我使用的 Debian/Ubuntu 存储库中没有提供更新版本的 Jenkins。肯定是 Jenkins 的最新版本导致了更用户友好的错误消息,然后使我能够解决这个问题。我很幸运 Oracle Linux(基于 Redhat 的发行版)的存储库有更新版本的 Jenkins,否则我永远不会弄清楚这一点。

© www.soinside.com 2019 - 2024. All rights reserved.