【问题标题】:How to restrict a user to run a particular job only in certain times per week如何限制用户仅在每周特定时间运行特定作业
【发布时间】:2021-05-10 19:13:45
【问题描述】:
我正在创建一个 Jenkins 作业,另一个团队将使用它来运行一些查询并从数据库服务器中提取数据。
但我希望他们只能在周二、周四、周六晚上 10:00 到凌晨 2:00(公司维护窗口)之间运行这项工作。
到目前为止,我还没有在 Jenkins 管道中找到任何解决方案,可能会在几个小时/分钟后超时。但我还没有找到一种方法来定义一周中的某些时间。
而且我不确定是否可以选择限制用户权限以便能够在特定时间运行作业!
我将不胜感激任何想法/建议。谢谢
【问题讨论】:
标签:
jenkins
time
permissions
jobs
【解决方案1】:
不是开箱即用的。您可以分两部分实现。
创建一个节点,使该节点仅在特定时间可用。为节点分配标签,限制只运行匹配标签的作业。将作业配置为使用相同的标签运行。
然后将用户访问权限限制为仅运行该作业。这取决于您使用的安全模型。
一般来说,授权不受时间限制,只受资源的访问(即:作业和节点)和可以做什么(运行、配置等)的限制。当然,对于詹金斯来说,我所知道的没有那么复杂。尽管如此,这种组合应该可以满足您的需求。
您可以在同一物理服务器上运行多个节点,因此您只需复制现有节点,添加标签并根据需要剪切 # 执行器。您可能需要一个单独的帐户来运行代理。
【解决方案2】:
一种方法是使用 2 个 Active Choice Reactive Parameters 类型的参数。
1 主动选择 Reactive 参数包含使用 Groovy 的当前系统日期,并且类型为隐藏 HTMl。如下所示:
1st active choice reactive reference parameter with current date time.
第二个 Active Choice 反应式参考包含 Java 脚本,用于从上一个字段中删除构建按钮或禁用基于当前日期门的构建按钮。
在 sn-p 下试过,但我在 javascript 方面很弱,所以可能需要一些更改。
return '''
<script>var startDate = Date(document.getElementById('current_date').value);
days=startDate.getDay();
hours = startDate.getHours();
if ( day != 2 && day != 4 && day != 6 && hours <=22 && hours>=2 ){
setTimeout(function(){document.getElementsByName("parameters")[0].getElementsByTagName("button")[0].remove();},500)
}
</script>
'''