标签搜索

目 录CONTENT

文章目录

通过WinSW添加Jenkins代理服务出现帐号权限问题

沙漠渔
2024-06-20 18:04:02 / 0 评论 / 0 点赞 / 34 阅读 / 2,266 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2024-06-20,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

之前在做一个Jenkins任务使用多个代理进行配合完成的时候,没有涉及到锁的问题,最近因为要涉及到加锁,并且要锁定多个stage,pipeline不支持这种用法,没办法,只能想办法将其他代理的(linux)的任务通过Windows下的代理通过ssh免密登录连接过去执行,保证所有需要加锁的步骤都能在一个stage中运行,这样就可以实现过程加锁了。

但是在这个过程中就发现了这么个问题,就是ssh免密连接linux时,一直不是去找c:\users\username下的.ssh去拿密钥。

前情提要

Windows下的Jenkins代理服务是通过WinSW来添加的,相对比较简单,配置好xml然后管理员权限启动bat或者执行相关的install和net start命令即可。

问题表现

  • 首先,在Jenkins的节点的系统信息中可以看到user.name不是Windows的系统登录用户,一般是一个比较奇怪的名字,user.home是C:/Windows/system32/config/systemprofile,USERPROFILE也是在C:/Windows/system32/config/systemprofile

  • 其次在解决了前面的问题情况下,使用ssh命令连接时还是会去找C:/Windows/system32/config/systemprofile下的.ssh目录获取密钥。

  • 自己登录系统使用ssh命令是获取c:\users\username下的密钥,使用管理员权限执行命令也是正常,也尝试在启动Jenkins代理服务之后立即执行也是正常的。

处理过程

首先排查Jenkins中的环境变量和本地变量的差异,发现了user.name、user.home等信息和Windows登录用户的相关信息不一致,首先想到的是将这些环境变量参数修改正确,分别通过了winsw的xml配置env节点、Jenkins的节点环境变量配置等方式,但是均失败告终,这里正好记录一下配置方式。

  • winsw的xml配置环境变量的方式(无效)
<configuration>
  
  <!-- ID of the service. It should be unique accross the Windows system-->
  <id>Jenkins-Agent-Service</id>
  <!-- Display name of the service -->
  <name>Jenkins-Agent-Service</name>
  <!-- Service description -->
  <description>Jenkins的Windows代理服务</description>
  
  <!-- Path to the executable, which should be started -->
  <executable>java</executable>
  <arguments>-Dfile.encoding=utf-8 -jar agent.jar 相关启动参数 可以直接通过Jenkins添加代理时获取</arguments>
  <env name="USERPROFILE" value="C:\Users\username"/>
  <env name="USERNAME" value="username"/>
  <env name="HOME" value="C:\Users\username"/>
</configuration>
  • Jenkins节点环境变量配置(无效)

节点列表 - 配置从节点 - 节点属性 - 键值对列表添加对应的键值

这两种方式均可修改环境变量中的信息,但是ssh连接时均无法使之使用登录用户的.ssh密钥连接。

经过翻查相关资料(bushi),询问AI,得知如下消息:

使用 winsw 启动的 Jenkins 服务默认以系统账户 (Local System) 运行,而不是以特定的用户账户运行。系统账户的默认主目录路径为 C:/Windows/system32/config/systemprofile,因此它会在这个路径下查找 .ssh 目录。

要解决这个问题,你可以通过以下方法之一来修改 Jenkins 服务的运行用户:

方法一:修改 Jenkins 服务的运行用户

  1. 打开服务管理器:按 Win + R 打开运行对话框。输入 services.msc 并按回车,打开服务管理器。

  2. 找到 Jenkins 服务:在服务列表中找到 Jenkins 服务。

  3. 修改服务登录账户:
    右键点击 Jenkins 服务,选择“属性”。
    切换到“登录”选项卡。
    选择“此账户”,然后输入一个具有适当权限的用户账户和密码。
    点击“确定”并重新启动 Jenkins 服务。

方法二:配置 Jenkins SSH 密钥路径

在 Jenkins Pipeline 中显式指定 SSH 密钥的路径。这可以通过配置 SSH Agent 插件来实现。

  1. 安装 SSH Agent 插件:
    进入 Jenkins 管理界面,点击“管理 Jenkins” -> “管理插件”。
    在“可选插件”选项卡下搜索 SSH Agent 插件并安装。
    在 Pipeline 中使用 SSH Agent:

  2. 在 Jenkins Pipeline 脚本中,配置 SSH Agent 插件以使用指定用户的 SSH 密钥。例如:

pipeline {
    agent any
    stages {
        stage('SSH Stage') {
            steps {
                sshagent(['your-ssh-credentials-id']) {
                    sh 'your-ssh-command'
                }
            }
        }
    }
}

其中,your-ssh-credentials-id 是在 Jenkins 凭据管理中配置的 SSH 密钥的 ID。

以上两种方式前者相对简单,且突然比对了一下之前可正常使用ssh的系统,发现之前确实也这么配置过,但是时间过长忘记了,所以选择第一种方式。

0
广告 广告

评论区