我有一个Jenkins服务器,应该将大型测试的执行工作卸载到HPC集群中:
群集允许SSH访问其用户。集群上的执行计算由工作负载管理器管理,该管理器确定每个用户的可用计算资源以及根据用户在服务器上执行的操作确定其工作的优先级。到目前为止。
必须使用工作负载管理器在集群上执行作业。
我想将集群与Jenkins测试服务器连接,因此我生成了SSH密钥对,并将jenkins的公钥复制到集群上的 authorized_keys 文件中。此时,我可以像这样以“群集”用户身份从命令行登录:
/jenkinsserver/home/jenkins> whoami
jenkins
/jenkinsserver/home/jenkins> ssh clusteruser@clusterloginnode
因此, jenkins 用户使用 jenkins 服务器的公共SSH密钥以 clusteruser 身份登录集群时没有问题。
这很完美,就像我接下来在集群上所做的一样,都依赖于集群配置: clusteruser 在那里拥有自己的资源,等等。
现在,如果我想在Jenkins管道中执行此操作,那么一切将无法正常进行。
首先,只需使用
ssh clusteruser@clusterloginnode
在管道中:
该连接导致错误:“ {st3不是终端,因此不会分配伪终端”,并且为此I found a solution here。
但是,当我使用“ -tt”选项时,连接挂起,我可以在管道输出中看到已经建立了连接,并且集群环境已经加载,但是它只是挂在那儿。
如果我对SSH命令使用“ -T”选项,则该命令将执行并退出,然后再执行其他任何操作,然后返回Jenkins主节点,因此我不会执行负责的命令开始测试。
如果我在Jenkins中使用Publish Over Ssh插件,它将在另一台机器上要求用户名:
这对我而言是0 ,因为我没有在重新设置模式的jenkins节点上的某个地方设置单个“ jenkins”用户,所以我希望这些用户请求通过SSH连接到像往常一样,使用他们的SHELL脚本使用集群用户名,以便他们可以访问集群上的资源(由工作负载管理器管理)。
我该怎么办?