Jenkins 配置和安全问题
Jenkins configuration and security issues
第一次使用Jenkins,网上看了好几篇文章都没有找到满意的答案。我们有 .Net 项目,我们正在使用私有 GitHub 存储库。现在我正在尝试用 Jenkins 构建 CI 服务器。想法是,无论何时开发人员将代码推送到 GitHub,我们都希望在 CI 服务器上构建项目。
我已经在 CI 服务器上安装了 Jenkins (v 1.646) 和 GitHub,Git 和 MSBuild 插件。在与 Jenkins 一起工作了几个小时之后,我现在有几个问题。
1> 默认情况下 Jenkins 运行s 在端口 8080 上。但是为了持续集成工作,Jenkins 必须接收来自 GitHub 的通知。默认情况下,端口 8080 与外界隔绝,在 CI 服务器上,端口 80 是开放的。我更新了 Jenkins.xml 文件中的 httpport,因此 Jenkins 在端口 80 上 运行ning。
我可以从 public 互联网访问 Jenkins,网络挂钩 url 现在是 http://ipaddress/github-webhook 但这会打开一个很大的安全漏洞,因为现在任何人都可以访问 Jenskins。为了解决这个问题,我配置了全局安全 -> 基于项目的矩阵授权策略。所以现在只有我可以登录和管理项目。然而,任何人仍然可以输入 IP 地址,登陆 Jenkins 页面并创建新用户帐户。当然,该用户无法访问任何内容,但它仍然会在 Jenkins 的数据库中创建一个新用户
那么有没有办法运行像往常一样在8080端口管理Jenkins,却在80端口收到通知
2> 在 Jenkins 的系统配置页面上,我只看到“Git”和“GitHub 插件配置”。我没有看到“GitHub Web Hook”选项,也没有看到“让 Jenkins 自动管理挂钩 URLs”在版本 1.646
中有更改吗
3> 由于我们使用的是私有存储库,因此我们的项目 URL 是 https://github.com/MyCompanyName/reponame and repository URL is https://github.com/MyCompanyName/reponame.git 请注意,url 的公司名称不是用户名。但是我看到错误 Jenkins 日志
Failed to remove hook from
GitHubRepositoryName[host=github.com,username=MyCompanyName,repository=reponame]
java.lang.NullPointerException: There is no credentials with admin
access to manage hooks on
GitHubRepositoryName[host=github.com,username=MyCompanyName,repository=reponame]
at
com.google.common.base.Preconditions.checkNotNull(Preconditions.java:231)
为什么它试图使用公司名称作为用户名?我已经设置了正确的用户凭据并且它能够提取代码。
1) 转到配置全局安全并取消选中 "Allow users to sign up" 以防止创建新帐户。
2&3) 如果您没有管理员权限或不想管理来自 Jenkins 的挂钩,请转到配置 System/Github 插件配置部分并取消选中 "Manage hook"。
我会为其他像我一样偶然发现但无法通过上述步骤修复它的人添加第二个答案:
1) 确保从您的任务 SCM 配置中删除结尾的 .git
2) 确保你在 Jenkins 中设置了一个 ip/domain 可以被 Github 访问,因为这将用于在你的 repos 中创建挂钩。例如,如果您在 VM 中 运行,这可能会默认设置为环回
在 Github 中导致此错误配置
3) 使用 http://your-jenkins-address:port/restart
重启 Jenkins
第一次使用Jenkins,网上看了好几篇文章都没有找到满意的答案。我们有 .Net 项目,我们正在使用私有 GitHub 存储库。现在我正在尝试用 Jenkins 构建 CI 服务器。想法是,无论何时开发人员将代码推送到 GitHub,我们都希望在 CI 服务器上构建项目。 我已经在 CI 服务器上安装了 Jenkins (v 1.646) 和 GitHub,Git 和 MSBuild 插件。在与 Jenkins 一起工作了几个小时之后,我现在有几个问题。
1> 默认情况下 Jenkins 运行s 在端口 8080 上。但是为了持续集成工作,Jenkins 必须接收来自 GitHub 的通知。默认情况下,端口 8080 与外界隔绝,在 CI 服务器上,端口 80 是开放的。我更新了 Jenkins.xml 文件中的 httpport,因此 Jenkins 在端口 80 上 运行ning。
我可以从 public 互联网访问 Jenkins,网络挂钩 url 现在是 http://ipaddress/github-webhook 但这会打开一个很大的安全漏洞,因为现在任何人都可以访问 Jenskins。为了解决这个问题,我配置了全局安全 -> 基于项目的矩阵授权策略。所以现在只有我可以登录和管理项目。然而,任何人仍然可以输入 IP 地址,登陆 Jenkins 页面并创建新用户帐户。当然,该用户无法访问任何内容,但它仍然会在 Jenkins 的数据库中创建一个新用户
那么有没有办法运行像往常一样在8080端口管理Jenkins,却在80端口收到通知
2> 在 Jenkins 的系统配置页面上,我只看到“Git”和“GitHub 插件配置”。我没有看到“GitHub Web Hook”选项,也没有看到“让 Jenkins 自动管理挂钩 URLs”在版本 1.646
中有更改吗3> 由于我们使用的是私有存储库,因此我们的项目 URL 是 https://github.com/MyCompanyName/reponame and repository URL is https://github.com/MyCompanyName/reponame.git 请注意,url 的公司名称不是用户名。但是我看到错误 Jenkins 日志
Failed to remove hook from GitHubRepositoryName[host=github.com,username=MyCompanyName,repository=reponame] java.lang.NullPointerException: There is no credentials with admin access to manage hooks on GitHubRepositoryName[host=github.com,username=MyCompanyName,repository=reponame] at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:231)
为什么它试图使用公司名称作为用户名?我已经设置了正确的用户凭据并且它能够提取代码。
1) 转到配置全局安全并取消选中 "Allow users to sign up" 以防止创建新帐户。
2&3) 如果您没有管理员权限或不想管理来自 Jenkins 的挂钩,请转到配置 System/Github 插件配置部分并取消选中 "Manage hook"。
我会为其他像我一样偶然发现但无法通过上述步骤修复它的人添加第二个答案:
1) 确保从您的任务 SCM 配置中删除结尾的 .git
2) 确保你在 Jenkins 中设置了一个 ip/domain 可以被 Github 访问,因为这将用于在你的 repos 中创建挂钩。例如,如果您在 VM 中 运行,这可能会默认设置为环回
在 Github 中导致此错误配置
3) 使用 http://your-jenkins-address:port/restart