我们的一些 Jenkins 工作是这样的,它们部署到例如客户端验收测试环境。非常重要的是,这类工作不是偶然触发的。因此,是否可以将 Jenkins 配置为在触发特定构建时以某种方式需要密码?
2 回答
设置基于项目的安全性,然后您可以基于每个作业限制构建访问。
从 Jenkins 配置页面的帮助中:
[基于项目的安全性] 是“基于矩阵的安全性”的扩展,允许为每个项目单独定义额外的 ACL 矩阵(在作业配置屏幕上完成)。
这使您可以说“Joe 可以访问项目 A、B 和 C,但他看不到 D”。有关基于矩阵的安全性的一般概念,请参阅“基于矩阵的安全性”的帮助。
ACL 是附加的,因此下面授予的访问权限将对所有项目都有效。*
好的。我对这个问题的 5cents。
我们的 Jenkins 使用 Redmine 的 mysql db 作为身份验证输入。
在詹金斯你需要下一个插件:
激活Password
参数后,在构建之前会要求您提供它。
所以,我想出了2个选项。
- 如果您的从站与 mysql(或任何数据库引擎)直接连接,则适用。
然后预构建检查:
SALT=$(mysql --defaults-extra-file="~/redmcheck.my" -B -se "select salt from redmine.users where login='${BUILD_USER}';")
HASH=$(mysql --defaults-extra-file="~/redmcheck.my" -B -se "select hashed_password from redmine.users where login='${BUILD_USER}';")
CHECK=$(sha1 -qs $SALT$(sha1 -qs $Password))
if [ $HASH != $CHECK ]
then
exit 1;
fi
如果您输入的密码不相等,它将破坏构建。
第二种解决方案,是在 Redmine 中使用 Rest API。它允许重新检查远程从站上的用户。
CODE=$(curl -X GET -u ${BUILD_USER}:${Password} --write-out "%{http_code}" -o /dev/null -s https://redmine/users/current.json ) ; 如果 [ $CODE != "200" ] 则退出 1;菲
如果它得到 200 个代码,那么它就开始构建。