【发布时间】:2014-01-17 18:20:45
【问题描述】:
我希望能够设置每晚重新启动 Jenkins 的计划作业 (Windows7)。有没有办法设置要运行的作业,以编程方式执行 safeRestart,我可以将其放入我的 Windows 调度程序中?
【问题讨论】:
-
如果我们可以定义一个在硬编码的日常维护窗口期间安排重启的作业,那将更加有用。
我希望能够设置每晚重新启动 Jenkins 的计划作业 (Windows7)。有没有办法设置要运行的作业,以编程方式执行 safeRestart,我可以将其放入我的 Windows 调度程序中?
【问题讨论】:
如果上述 CLI 方法不起作用(在我的情况下,它失败了:hudson.security.AccessDeniedException2:anonymous is missing theOverall/Read 权限)
您可以创建Groovy plugin 构建步骤和“执行系统 Groovy 脚本”:
import hudson.model.*;
Hudson.instance.doSafeRestart(null);
或新的 Jenkins 实例
import jenkins.model.*
Jenkins.instance.doSafeRestart(null);
然后,您可以将此作业设置为按计划触发。
例如,要在每天午夜重新启动 Jenkins,请设置“定期构建”:H 00 * * *
【讨论】:
在此处为来自 Google 的其他人发布此信息。您可以使用 CLI 将作业添加到 Jenkins 以重新启动自身。添加一个带有要执行的 shell 步骤的作业:
java -jar "$JENKINS_HOME/war/WEB-INF/jenkins-cli.jar" -s "$JENKINS_URL" safe-restart
【讨论】:
您可以在Jenkins CLI 中使用安全重启命令。
【讨论】:
对于启用 LDAP 的 Jenkins,直接调用 safe-restart 命令不起作用。 This JENKINS JIRA helped
先登录
java -jar jenkins-cli.jar -s http://localhost:8080 login --username "$JCLIUSER" --password "$JCLIPASSWD"
之后安全重启
java -jar jenkins-cli.jar -s http://localhost:8080 safe-restart --username "$JCLIUSER" --password "$JCLIPASSWD"
【讨论】:
解决方案: 使用 Jenkins Resftul API 重新启动您的 jenkins 服务,并创建一些每天执行的 crontab 任务 - (在 Linux/Unix/Mac 版本上) , jenkins 上与重启相关的基本标志是:
--restart (force restart , terminating current session)
--safeRestart (restart after all builds and jobs are completed [Graceful restart])
示例: 任务是:
curl -x POST -u <user>:<token> <jenkins-ip>/safeRestart
用于添加 crontab:
#Go to your scripts directory
cd ~/scripts
# edit new script file
sudo vim restart-jenkins-task.sh
# paste the task above ^ ...
# make the script executable
chmod +x restart-jenkins-task.sh
# add crontab task
sudo crontab -e
# paste the following: run the new script every night at 00:00 (12 am midnight)
0 0 * * * ~/scripts/restart-jenkins-task.sh
注意: 管理全局维护任务的最佳实践是生成一些自动化用户来处理应用程序和维护任务并给予他适当的权限(只有具有管理员权限的用户才能执行重启)。
用于生成具有管理员权限的用户访问 (Manage Jenkins -> Manage and Assign Roles -> Assign Roles -> create user and toggle administrator permission),
用于从命令行生成访问令牌以验证 Jenkins (Jenkins -> Go to User -> Add new token)
【讨论】: