OCI 上的 Jenkins 从节点无法部署

Jenkins Slave Nodes on OCI Won't Deploy

我正在尝试使用 OCI 中的 Jenkins Master 和从属节点部署 Jenkins。我正在按照 Oracle 大学的分步说明和视频进行操作。但是,它无法部署从节点。以下 link 看起来与我遵循的说明非常相似:

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

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

我的模板试图部署 Linux 个从属节点。

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

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

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

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

下面的日志

供应新的云基础设施实例 2020 年 12 月 16 日 2:47:57 AM INFO com.oracle.bmc.core.ComputeClient setEndpoint 将端点设置为 https://iaas.us-phoenix-1.oraclecloud.com 2020 年 12 月 16 日 2:47:57 上午警告 com.oracle.cloud.baremetal.jenkins.BaremetalCloud$ExplicitProvisioner 电话 提供奴隶 jenkins-192.168.0.11-8ddc4d29-cad9-46cd-b565-eed7611d6fc5 失败! java.lang.Exception:实例创建失败,因为:null 在 com.oracle.cloud.baremetal.jenkins.client.SDKBaremetalCloudClient.createInstance(SDKBaremetalCloudClient.java:237) 在 com.oracle.cloud.baremetal.jenkins.BaremetalCloud.provision(BaremetalCloud.java:230) 在 com.oracle.cloud.baremetal.jenkins.BaremetalCloud.access$100(BaremetalCloud.java:65) 在 com.oracle.cloud.baremetal.jenkins.BaremetalCloud$Provisioner.call(BaremetalCloud.java:222) 在 com.oracle.cloud.baremetal.jenkins.BaremetalCloud$ExplicitProvisioner.call(BaremetalCloud.java:382) 在 com.oracle.cloud.baremetal.jenkins.BaremetalCloud$ExplicitProvisioner.call(BaremetalCloud.java:372) 在 jenkins.util.ContextResettingExecutorService$2.call(ContextResettingExecutorService.java:46) 在 jenkins.security.ImpersonatingExecutorService$2.call(ImpersonatingExecutorService.java:80) 在 java.util.concurrent.FutureTask.run(来源不明) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(来源不明) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(未知来源) 在 java.lang.Thread.run(来源不明)

我找到了答案,所以我把它贴在这里。看来问题是它不支持密码保护的 ssh 密钥。一旦我生成了一个不受密码保护的新密钥,日志中的 java 空错误就消失了,它部署了从属节点。

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

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

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

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

我不太确定为什么这次在日志中收到更详细的错误消息。我认为我安装的 AWS 插件一定与它有关。不是这样,因为后来我在原来的主机上安装了 AWS 插件,它仍然给出了相同的神秘错误消息 Java = Null.

然后我注意到安装在 Oracle Linux 上的 Jenkins 版本是 Jenkins 2.271——比我原来的主机(一个 Debian/Ubuntu 发行版)更新的版本——它有 Jenkins 版本 2.263。我使用的 Debian/Ubuntu 存储库中没有更新版本的 Jenkins。一定是 Jenkins 的最新版本导致了更加用户友好的错误消息,然后使我能够解决这个问题。我很幸运 Oracle Linux(基于 redhat 的发行版)的回购有更新版本的 Jenkins,否则我永远也想不出来。