【问题标题】:Jenkins Swarm plugin authenticationJenkins Swarm 插件认证
【发布时间】:2015-10-01 11:18:33
【问题描述】:

我有一个 jenkins 主服务器和一个单独的从服务器。我使用 swarm 插件将奴隶连接到主人。在我配置 LDAP 身份验证并撤销匿名用户的授权之前,一切正常。

显然,现在我必须对 swarm 客户端进行身份验证,但我无法做到这一点。 如果有人有使用 swarm 插件的经验,请告诉我。

从机控制台:

$ java -jar swarm-client-2-0.jar -master http://x.x.x.x:8080/ -username 'exxxx' -password common.pwd
Discovering Jenkins master
Oct 01, 2015 2:14:51 PM org.apache.commons.httpclient.auth.AuthChallengeProcessor selectAuthScheme
INFO: basic authentication scheme selected
Oct 01, 2015 2:14:51 PM org.apache.commons.httpclient.HttpMethodDirector processWWWAuthChallenge
INFO: Failure authenticating with BASIC 'Jenkins'@x.x.x.x:8080
Failed to fetch slave info from Jenkins CODE: 401
Retrying in 10 seconds

兄弟,

【问题讨论】:

  • 您使用的是什么版本的 Jenkins?事实证明,swarm-client 要求密码是单引号。试过 -disableSslVerification :在 HttpClient 中禁用 SSL 验证。?
  • 您需要通过 Jenkins 中具有 Create Slave 访问权限的用户。查看 Jenkins 中的管理用户/角色或尝试在 Jenkins 中创建用户并分配他创建从属访问和使用命令。

标签: jenkins jenkins-plugins


【解决方案1】:

您至少需要 Create Slave 权限或更高权限才能使用 Swarm 插件创建从站。

您有以下选择:

  1. 打开一个请求并让您的网络团队创建一个新的 LDAP/服务帐户(通用),这样您就不必担心它的密码在接下来的 N 号内被更改。天。

  2. 分配该用户或授予其创建从属权限或在其中看到的所有访问权限(从属部分根据您的图像快照)。

  3. 使用该用户的用户 ID/密码。您可以在 Jenkins 中创建一个全局变量/使用管理凭据部分来定义用户/密码,并且可以使用 ENV 变量或进行基于凭据的身份验证。

  4. 运行你的命令来创建从站,它就会工作,类似于:

$ java -jar swarm-client-2.0-jar-with-dependencies.jar \ -name "$(主机名 -a)_01" \ -fsroot "$(pwd)/$(主机名 -a)_01" \ -master http://my_jenkins_server.my.company.com:8081 \ -disableSsl验证\ -用户名 c123456_or_slaveSpecialUser \ -密码 $p \ -描述“$(主机名-a)”\ -执行者 5\ -标签“Linux CentOS ANSIBLE”\ -模式“正常”\ -重试3\ -显示主机名\ -t java=~/tools/jdk1.8.0_45\ -t gradle=~/tools/gradle-2.9 \ -t Maven=~/tools/apache-maven-3.3.3 \ -t Groovy2=~/tools/groovy-2.4.5 \ --showHostName \ -disableClientsUniqueId

注意
模式可以是-mode 'exclusive'
使用 -disableClientsUniqueId 选项将根据您的 -name 参数创建名称的从站(而不是使用唯一/字母数字 ID 作为后缀)。

补充:为了在 slave 的配置中创建 Tool 位置,我最初使用 -t **Java=~/tools/jdk1.8.0_45 -t Gradle=~/tools/gradle-2.9* * 并且该命令给了我一个错误Jenkins 上没有定义“Java”工具

javax.servlet.ServletException: java.lang.RuntimeException: Jenkins 上没有定义“Java”工具。

经过研究,我发现这是因为在我的 Jenkins Master(我使用的)中,Jenkins 全局设置中的 JDK Installations 部分将此工具名称值设置为“java"(全都较低)。

尝试 -t java=~/tools/jdk1.8.0_45 解决了这个问题,现在我可以看到 (JDK) java 工具的值 ~/tools/jdk1.8.0_45 在从站的配置中。

注意:
如果您正在使用“Anonymous”用户连接或想要将您的从站连接到您的 Jenkins 主站(即,您不必提供 -username c123456_or_slaveSpecialUser -password $p参数),然后在 Jenkins Master 中(具有管理员级别权限,仅设置一次)> 在 Manage Roles and Users > 在 GLOBAL Roles 部分下,创建一个角色(或更改现有的 Viewer 角色)并分配“整体 + 读取”和“从属 + 创建”访问权限。

然后,在同一页面的“Slave Roles”下,为 ex: autoslave 或类似的东西创建一个角色并分配所有访问权限(连接、配置、...、删除)和MAKE 确保在其中为 ex:“swarm_slave.*”分配一个模式(正则表达式)。这将做的是,从现在开始,您可以运行 java -jar slave-client-...depedencies.jar without 使用 -username 和 -password 参数,如果您正在创建带有名称的 swarm slave从“swarm_slave....”开始,然后,它们将自动创建/连接/删除(只要 swarm 从属 java 进程将在从属服务器上运行/存在)。

如果您使用 Jenkins Rest/API (groovy) 脚本来维护 swarm slave,遵循从属的标准名称模式也将给予您更多的控制权。

还可以在这里查看更多信息(如何将 ENVIRONMENT 变量添加到新创建的节点):Jenkins Slave - How to add or update ENVIRONMENT variables

下一步是使用 Docker 在从节点上创建容器。不要忘记在此处阅读有关这些内容的更多信息:

http://dockins.github.io/https://wiki.jenkins.io/display/JENKINS/Docker+Slaves+Plugin https://github.com/jenkinsci/docker-slaves-plugin

【讨论】:

  • #3 的表现如何?
  • @FlorianStraub 这意味着在 Jenkins 中,有一种方法可以创建掩码变量(在 Jenkins 的全局设置/配置中,即不在工作级别)。转到 Jenkins > 管理 Jenkins > 配置系统 > 查找“Masked passwords - ...”部分(有 2 个自动和全局密码变量名/值对)。在默认/自动部分,勾选您想要的(例如:密码参数,非存储密码..等),但您想要的是在第二部分,添加一个变量“myUser_SomeName”并提供其密码/值。现在你可以在任何工作中使用它作为 $myUser...
  • 换句话说: -username $myUser -password $myUserPassword (如果您创建了。您只能对密码变量(myUserPassword)执行此操作,因为这是您要屏蔽的主要变量。对于 -用户名 $myUser,您实际上不必提供 -username c123user(硬编码)(在 Jenkins 工作中),但这取决于您。
  • 是的。请参阅插件中的文档(在 After 部分下):wiki.jenkins-ci.org/display/JENKINS/Mask+Passwords+Plugin
  • 感谢@ArunSangal 的精彩文章。我通过反复试验发现了一些补充: * 在 url/manage-roles、全局角色中,我在 url/assign-roles 中添加了 "slaverole" 和 "Overall: Read" 、 "Agent:Connect" 和 "Agent:Create" * , 将 Anonymous 添加到全局角色 slaverole。
【解决方案2】:

在我们未能实施 Arun Sangal 的解决方案后,我们找到了一种方法,让每个人都可以在登录时进行所有操作,同时仍然能够使用 SWARM 节点。

我们通过为 Anonymous 分配所有“代理”权限,以及针对工作的 Read 和 Discover 以及针对视图和一般情况的 Read 来设法做到这一点。

然后我们创建了一个额外的角色“admin”,它拥有所有权限(都在“管理角色”中)。

在“Assign Roles”中,我们将 admin 角色分配给内置组“authenticated”,将“Anonymous”分配给“Anonymous”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-07
    • 1970-01-01
    • 1970-01-01
    • 2018-03-01
    相关资源
    最近更新 更多