在本文中,我们将详细介绍以另一个用户身份运行jenkins作业的各个方面,并为您提供关于如何以其他用户身份运行的相关解答,同时,我们也将为您带来关于groovy–禁用给定JenkinsView/Tab
在本文中,我们将详细介绍以另一个用户身份运行jenkins作业的各个方面,并为您提供关于如何以其他用户身份运行的相关解答,同时,我们也将为您带来关于groovy – 禁用给定Jenkins View / Tab中的所有Jenkins作业、Jenkins作业运行系统的Groovy脚本如何响应用户杀死、Jenkins限制了每个用户的作业视图、linux – 从没有tty stdin的根脚本中以另一个用户身份运行脚本的有用知识。
本文目录一览:- 以另一个用户身份运行jenkins作业(如何以其他用户身份运行)
- groovy – 禁用给定Jenkins View / Tab中的所有Jenkins作业
- Jenkins作业运行系统的Groovy脚本如何响应用户杀死
- Jenkins限制了每个用户的作业视图
- linux – 从没有tty stdin的根脚本中以另一个用户身份运行脚本
以另一个用户身份运行jenkins作业(如何以其他用户身份运行)
我使用指南安装了jenkins,该指南在服务器中创建了一个“ jenkins”用户,并且显然在其下运行jenkins服务器。
我在服务器上的所有设置(虚拟环境,python软件包安装)均针对其他用户(“ ci-user”)。我有什么办法可以以“ ci_user”而不是“
jenkins”的身份运行我的工作?我想避免为“詹金斯”用户再次进行所有设置。
答案1
小编典典文件中有JENKINS_USER
变量etc/default/jenkins
。您可以将其更改为ci_user,然后需要更改几个文件夹的所有权并重新启动计算机。
chown -R ci_user /var/lib/jenkinschown -R ci_user /var/log/jenkinschown -R ci_user /var/cache/jenkins
groovy – 禁用给定Jenkins View / Tab中的所有Jenkins作业
我尝试了以下groovy语法,首先只显示给定视图中的所有作业,但它出错了.
jenkins = Hudson.instance //The following works actually but gives a lot of info. //println "----" + jenkins.instance.getView("Gradle Deploys").items println "----" + jenkins.instance.getView("Gradle Deploys").items.each.getItems().print(it)
一旦我在给定视图中获得了只是作业名称的列表,我只需要在上面的命令中使用“.disable()”函数,它就可以工作了.
如果我使用下面的代码,它会做我想要的,但我正在寻找一个衬垫.
for (item in jenkins.instance.getView("Gradle Deploys").items) { println("\nJob: $item.name") item.disabled=true }
解决方法
jenkins.instance.getView("Gradle Deploys").items*.disabled = true
但是如果你想同时打印出来的东西,你需要一个
jenkins.instance.getView("Gradle Deploys").items.each { item -> println "\nJob: $item.name" item.disabled = true }
Jenkins作业运行系统的Groovy脚本如何响应用户杀死
我有一个长期运行的System
Groovy脚本,它可以启动数以万计的其他构建。为了不使构建队列过长(这将使UI无法使用),它将监视构建队列的长度。如果构建队列长于给定的阈值,它将不会启动任何新的构建并休眠一分钟。
问题是,此脚本无法响应用户的kill操作。当用户单击UI上的“杀死此构建”按钮时,什么也没有发生。我想知道是否有一种方法可以让系统Groovy脚本检查是否应该终止当前版本,因此它将退出睡眠并等待循环?
我尝试监视Executor.shouldRun(),但是用户的kill操作不会更改它。
答案1
小编典典我过去曾调查过“杀死”按钮的问题。我的理解是,杀死信号实际上是立即发送给工作的。但是,如果该工作在其他API(或类似的东西)中很忙,则无法保证将其提取。但是,kill信号将不会被存储,否则作业将立即对其做出反应,否则将被忽略。睡眠一分钟可能就是这种情况。
因此,作为一种变通办法,我将创建自己的机制来向您的脚本发出信号,告知它应该停止。这可以通过将文件放置到特定位置(例如,groovy脚本作业的工作空间)来完成。这可以通过第二项作业称为Kill_job_1来完成。现在,在您的工作开始休眠之前(或在唤醒之后),您检查该文件是否存在,如果找到该文件,则结束脚本。当您第二次开始工作时,请不要忘记确保已清理文件。
Jenkins限制了每个用户的作业视图
有没有一种方法可以限制用户仅查看詹金斯中的某些作业。
Jenkins允许通过“基于项目的矩阵授权策略”来限制每个项目的用户能力。问题在于,如果没有“总体”“读取”设置,用户将无法访问任何内容。这似乎使他们可以查看所有作业。
还有另一个允许工作限制的插件吗?
linux – 从没有tty stdin的根脚本中以另一个用户身份运行脚本
下面我给出了我尝试失败的五种尝试.
>:
#!/bin/bash exec >> /var/log/training_service.log 2>&1 setuidgid training training_command
最后一行不够好,因为对于training_command,我们需要环境来设置用户.
>:
su - training -c 'training_command'
这看起来像它(Run a shell script as a different user),但给’标准必须是tty’作为su确保tty存在可能接受密码.我知道我可以通过修改/ etc / sudoers(la https://superuser.com/questions/119376/bash-su-script-giving-an-error-standard-in-must-be-a-tty)使其消失,但我不愿意并且不确定后果.
>:
sudo -u training -i bash -c 'source $HOME/.bashrc; training_command'
同一主题的变体:’sudo:对不起,你必须有一个tty来运行sudo’
>:
runuser - training -c 'training_command'
这个给runuser:无法设置组:连接被拒绝.我发现这个错误没有任何意义或解决方法.
>:
ssh -p100 training@localhost 'source $HOME/.bashrc; training_command'
这个更像是一个表达解脱的笑话.即使这一个失败,主机密钥验证失败. (主机密钥IS在kNown_hosts等中).
注意:如果我从root shell运行包装器脚本,那么所有2,3,4都应该工作.只有在系统服务监视器(daemontools)启动时才会出现问题(我猜没有tty终端).
我被卡住了.这件事难以实现吗?
我感谢所有对最佳实践的见解和指导.
(这也发布在超级用户:https://superuser.com/questions/434235/script-calling-script-as-other-user)
解决方法
Defaults:root !requiretty
您还需要/ etc / sudoers中的以下行,以便root可以执行所有操作(默认情况下应启用此选项,但请检查以确保):
root ALL=(ALL) ALL
然后你可以做以下事情:
sudo -u training /path/to/training_command
今天的关于以另一个用户身份运行jenkins作业和如何以其他用户身份运行的分享已经结束,谢谢您的关注,如果想了解更多关于groovy – 禁用给定Jenkins View / Tab中的所有Jenkins作业、Jenkins作业运行系统的Groovy脚本如何响应用户杀死、Jenkins限制了每个用户的作业视图、linux – 从没有tty stdin的根脚本中以另一个用户身份运行脚本的相关知识,请在本站进行查询。
本文标签: