2

我们的一些 Jenkins 工作是这样的,它们部署到例如客户端验收测试环境。非常重要的是,这类工作不是偶然触发的。因此,是否可以将 Jenkins 配置为在触发特定构建时以某种方式需要密码?

4

2 回答 2

1

设置基于项目的安全性,然后您可以基于每个作业限制构建访问。

从 Jenkins 配置页面的帮助中:

[基于项目的安全性] 是“基于矩阵的安全性”的扩展,允许为每个项目单独定义额外的 ACL 矩阵(在作业配置屏幕上完成)。

这使您可以说“Joe 可以访问项目 A、B 和 C,但他看不到 D”。有关基于矩阵的安全性的一般概念,请参阅“基于矩阵的安全性”的帮助。

ACL 是附加的,因此下面授予的访问权限将对所有项目都有效。*

于 2013-01-22T13:21:01.113 回答
1

好的。我对这个问题的 5cents。

我们的 Jenkins 使用 Redmine 的 mysql db 作为身份验证输入。

在詹金斯你需要下一个插件:

激活Password参数后,在构建之前会要求您提供它。

所以,我想出了2个选项。

  1. 如果您的从站与 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

如果您输入的密码不相等,它将破坏构建。

  1. 第二种解决方案,是在 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 个代码,那么它就开始构建。

于 2017-01-19T19:07:30.677 回答