github和bitbucket集成

本文档将在以下章节中概述使用CircleCI来使用GitHub、GitHub Enterprise或Bitbucket金宝博娱乐官网网址 Cloud:

概要

要使用Circleci,您需要使用GCHUB或Bitbucket供VCS。将项目添加到Circleci时,使用您注册时给Circleci的权限将以下GitHub或Bitbucket云设置添加到存储库中:

  • 一种部署键它用于从GitHub或Bitbucket Cloud中检出你的项目。
  • 一种服务钩(或“推钩”)这是用来通知CircleCI当你推到GitHub或Bitbucket云。

Circleci默认构建推钩子。因此,为存储库的所有推送挂钩触发构建,并且推动是触发构建的最常见情况。

Circleci使用钩子有一些额外的,常见的情况,如下所示:

  • Circleci处理PR Hooks(拉请求挂钩)以存储Circleci应用程序的PR信息。如果设置了唯一的构建拉请求设置,则Circleci将仅在PR打开时触发构建,或者当存在存在现有PR的分支时。即使设置此设置,我们将始终构建所有推动项目的默认分支。
  • 如果设置了构建分叉拉请求设置,则Circleci将响应从叉扣创建的PRS来触发构建。

可以编辑GitHub或Bitbucket云中的webhook来限制触发构建的事件。编辑webhook设置可以让你改变哪些钩子被发送到CircleCI,但是不会改变触发构建的钩子类型。CircleCI总是会构建推钩,并且会在PR钩子上构建(取决于设置),但是如果你从webhook设置中移除推钩,CircleCI就不会构建。指的是编辑一个钩子文档或者Atlassian管理Webhooks文档有关详细信息。

请参阅Circleci文档工作流过滤器如何构建标记推动。

添加一个.circleci /配置。yml文件

创建并提交一个.circleci / config.yml文件到Github或Bitbucket云存储库,Circleci立即检查您的代码并运行您的第一份工作以及任何配置的测试。例如,如果您正在使用Postgres规范和功能的Rails项目,您可能配置以下作业运行步骤:

职位建立Docker.-图片Circleci / Ruby:2.4.1-Jessie身份验证用户名mydockerhub-user.密码$ dockerhub_password.#上下文/项目UI ENV-VAR参考步骤-|捆绑安装Bundle Exec Rake DB:架构:加载bundle exec rspec规范Bundle Exec Cucumber.

Circleci每次都在干净的容器上运行测试,以便您的代码永远无法访问其他用户,每次推动时都会新鲜。立即观看测试更新你的仪表板或者在Circleci在作业完成后发出通知电子邮件时获得状态。状态徽章也显示在GitHub或Bitbucket云上,如以下屏幕截图所示,用于来自用户键的提交:

提交后状态徽章“></p>
      <p>综合状态也显示在拉出请求屏幕上,以显示所有测试已通过:</p>
      <p><img src=钥匙的最佳实践

  • 尽可能使用部署键。
  • 无法使用部署键时,机用户密钥必须使用,并将其访问限制为所需的最有限的repos集和权限。
  • 切勿使用非机器用户密钥(密钥应与构建相关联,而不是特定的人)。
  • 您必须将部署或用户键旋转,作为撤消对该次储存的用户访问的一部分。
    1. 在撤消用户在GitHub中的访问后,删除GitHub中的键。
    2. 删除Circleci项目中的键。
    3. 在CircleCI项目中重新生成键。
  • 确保没有开发人员可以使用比它们所需的用户密钥更多的repo在repo中访问构建。

重命名组织和存储库

如果您发现您需要重命名您之前已连接到Circleci的Org或Repo,则最佳实践是按照下列步骤操作:

  1. 重命名VCS中的ORG / repo。
  2. 例如,转到CircleCI应用程序,使用新的org/repo名称,app.www.drag240sx.com/pipelines/ / /
  3. 确认您的计划,项目和设置已成功转移。
  4. 然后,如果需要的话,您可以使用VCS中以前使用的名称自由地创建一个新的org/repo。

注意:如果不遵循这些步骤,则可能会丢失对ORG或Repo设置的访问,包括环境变量背景

使您的项目能够签出其他私有存储库

如果您的测试过程指的是多个存储库,则Circleci除了部署密钥外,Circleci还需要GitHub用户键,因为每个部署密钥仅适用于一个而GitHub用户密钥具有访问权限所有您的GitHub存储库。

在项目中提供Circleci与GitHub用户密钥项目设置>SSH键。向下滚动页面到用户密钥然后点击授权GitHub.。CircleCI创建这个新的SSH密钥并将其与您的GitHub用户帐户关联起来,以便访问您的所有存储库。

用户密钥安全性

Circleci永远不会让你的SSH键公众。

请记住,SSH密钥应仅与可信用户共享。雇用用户键的项目上的GitHub合作者可以访问您的存储库,因此,仅委托用户密钥给您将与您委托您的源代码的人。

用户密钥访问相关的错误消息

下面是一些常见的错误,它们指出您需要添加用户密钥。

蟒蛇:在PIP安装步:

错误:没有找到存储库。

Ruby:在捆绑安装步:

许可否认(PublicKey)。

通过机器用户控制访问

对于对多个存储库的细粒度访问,最好的做法是为Circleci项目创建机器用户。一种机用户是一个GitHub用户,用于运行自动化任务。通过使用计算机用户的SSH密钥,您允许任何具有存储库访问权的人构建、测试和部署项目。创建一个机器用户还可以降低丢失链接到单个用户的凭据的风险。

要使用计算机用户的SSH密钥,请执行以下步骤。

注意:要执行这些步骤,计算机用户必须具有管理访问权限。完成项目添加后,可以将计算机用户恢复为只读访问。

  1. 通过遵循创建机器用户GitHub上的说明

  2. 以机器用户身份登录GitHub。

  3. 登录Circleci。当GitHub提示您授权CircleCI时,单击授权申请按钮。

  4. 从“添加项目”页面,请按照所需的所有项目进行访问。

  5. 项目设置>签出SSH键页面,单击授权GitHub.按钮。这就给了CircleCI代表机器用户创建并上传SSH密钥到GitHub的权限。

  6. 点击创建和添加XXXX用户密钥按钮。

现在,Circleci将为在构建过程中运行的任何Git命令使用机器用户的SSH密钥。

权限概述

circleci请求VCS提供程序的以下权限,如所定义的GitHub权限模型bitbucket权限模型

阅读许可

  • 获取用户的电子邮件地址

写权限

  • 获取用户反馈的列表
  • 向用户帐户添加一个ssh键

管理员权限,设置项目所需

  • 将部署键添加到repo
  • 将服务挂钩添加到repo中

注意:Circleci只要求绝对必要的权限。但是,Circleci受到每个VCS提供商选择供应的特定权限的限制。例如,获取所有用户的Repos - 公共和私人的列表 - 来自GitHub需要回购范围,即写级访问。GitHub没有为列出用户的所有存储库提供只读权限。

如果您对减少权限的次数感到强烈,请考虑联系您的VCS提供商传达您的疑虑。

团队账户的权限

本节概述了可能的团队和个人账户选择,可满足各种业务需求:

  1. 如果个人拥有个人GitHub帐户,他们将使用该帐户登录到CircleCI,并在CircleCI上跟踪项目。GitHub中存储库上的每个“协作者”在提交提交时也能够跟踪项目并在CircleCI上构建。由于GitHub和Bitbucket store的协作方式,CircleCI团队页面可能不会显示完整的列表。要获得准确的贡献者列表,请参考您的GitHub或Bitbucket项目页面。

  2. 如果个人升级到GitHub团队帐户,他们可以添加团队成员,并可以向运行构建的人提供授权的管理员权限。团队GitHub帐户(ORG)的所有者必须转到Circleci添加项目,单击“Github应用程序权限”屏幕的链接,然后选择“授权Circleci”以启用ORG的成员以遵循其帐户的项目。有两名成员的团队账户每月25美元,而是个人账户每月7美元。

  3. 个人Bitbucket账户可免费用于五人团队的私人回购。个人可以创建一个Bitbucket团队,添加成员,并根据需要给那些需要构建的人发放回购的管理权限。这个项目将出现在圆环为成员跟随没有额外的成本。

如何为GitHub组织重新启用Circleci

本节介绍如何在启用GitHub组织启用第三方应用程序限制后重新启用Circleci。去github设置在“组织访问”部分中:

  • 如果您不是所讨论的组织的管理员(管理员将必须批准请求)或
  • 如果您是管理员,则“授予访问”

访问权限后,Circleci应该再次行事。

GitHub最近增加了批准的能力每个组织级别的第三方应用程序访问。在此更改之前,组织的任何成员都可以授权一个应用程序(生成一个与他们的GitHub用户帐户相关联的OAuth令牌),并且应用程序可以使用这个OAuth令牌来代表用户通过API进行操作,无论在OAuth流中授予了什么权限。

当启用第三方访问限制时,OAuth令牌在默认情况下将不能访问组织数据。无论是在OAuth过程中还是以后,您都必须针对每个组织请求访问权限,并且组织管理员必须批准该请求。

您可以通过访问GitHub上的组织设置页面来启用第三方访问限制,并单击“第三方应用程序访问策略”部分中的“设置应用程序访问限制”按钮。

如果你在CircleCI已经运行构建的组织上启用了这些限制,那么我们将停止接收GitHub的push事件钩子(因此不会构建新的push),并且API调用将被拒绝(例如,导致重新构建旧构建的源代码签出失败)。要使CircleCI重新工作,您必须授予对CircleCI应用程序的访问权。

我们使用的帐户和权限系统不像我们想的那样清楚,正如提到的,我们有一个很大的改进的系统在开发与用户作为第一类公民在CircleCI。

部署密钥和用户密钥

什么是部署密钥?

添加新项目时,Circleci为您的项目创建基于Web的VCS(GitHub或Bitbucket)的部署密钥。部署密钥是特定于repo的ssh键。如果您使用GitHub作为VCS,则GitHub具有公钥,Circleci存储私钥。部署密钥提供对单个存储库的Circleci访问权限。为防止Circleci从推送到存储库,则此部署密钥仅为读取。

如果要从构建中推送到存储库,则需要一个带有写访问权限的部署密钥。使用Write Access创建部署密钥的步骤取决于您的VCS。请参阅下面的GitHub特定说明。

什么是用户密钥?

用户密钥是特定于用户的SSH密钥。您的VCS拥有公钥,而CircleCI存储私钥。拥有私钥就能够充当该用户,以便对项目进行“git”访问。

创建GitHub部署密钥

在此示例中,GitHub存储库是https://github.com/you/test-repo.,而CircleCI项目就是//www.drag240sx.com/gh/you/test-repo

  1. 通过遵循创建一个SSH密钥对GitHub说明。当提示输入密码时,请执行输入一个。

    警告:最近的更新ssh-keygen.默认情况下,不要以PEM格式生成密钥。如果您的私钥无法启动开始RSA私钥,通过生成密钥来执行PEM格式rsa -C "your_email@example.com"

  2. https://github.com/you/test-repo/settings/keys.,然后点击“添加部署键”。在“title”字段中输入一个标题,然后复制并粘贴在步骤1中创建的公钥。勾选“允许写访问”,然后按“添加键”。

  3. 转到您的项目设置,单击SSH密钥,然后“添加SSH密钥”,添加您在步骤1中创建的私钥。在“Hostname”字段中,输入“github.com”,点击提交按钮。

  4. 在你的配置。添加指纹使用add_ssh_keys关键:

2职位部署工作步骤-add_ssh_keys指纹-所以:我:鳍:g:呃:pr:in:t“

当您从一个作业推入GitHub存储库时,CircleCI将使用您添加的SSH密钥。

创建一个Bitbucket用户密钥

Bitbucket目前没有为CircleCI提供创建用户密钥的API。然而,它仍然是可能的创建一个用户密钥遵循以下工作:

  1. 在CircleCI应用程序中,转到项目的设置。

  2. 导航到结帐SSH键页面。

  3. 右键单击创建<用户名>用户密钥按钮并选择检查选项打开浏览器检查器。

  4. 在开发人员控制台中,选择网络标签。

  5. 在开发人员控制台中,单击checkout-key使用201个地位并复制public_key到你的剪贴板。

  6. 按照Bitbucket的指南添加钥匙到Bitbucket设置SSH键

  7. 在你的.circleci / config.yml,添加指纹add_ssh_keys关键:

2职位部署工作步骤-add_ssh_keys指纹-所以:我:鳍:g:呃:pr:in:t“

这些键如何使用?

当Circleci构建项目时,私钥安装到.ssh.目录和SSH随后被配置为与版本控制提供程序通信。因此,私钥用于:

  • 检查主要项目
  • 检查任何GitHub托管的子模块
  • 检查github托管的私有依赖关系
  • 自动git合并/标记/等。

因此,对于具有其他私有依赖项的项目,部署键不够强大。

安全性怎么样?

CircleCI生成的签出密钥对的私钥不会离开CircleCI系统(只有公钥被传输到GitHub),并在存储中安全加密。但是,由于密钥已安装到构建容器中,所以在CircleCI中运行的任何代码都可以读取它们。同样,可以通过SSH118金宝博娱乐城进入的开发人员将可以直接访问此密钥。

部署键和用户键之间是否有区别?

部署密钥和用户密钥是GitHub唯一支持的密钥类型。部署密钥是全局唯一的(例如,不存在使部署密钥能够访问多个存储库的机制),而用户密钥没有这样的概念范围与与它们相关联的用户分开。

要实现对多个回购的细粒度访问,请考虑创建Github调用计算机用户的内容。准确为您的构建所需的权限提供此用户,然后将其用户密钥与Circleci上的项目相关联。

建立SSH主机的真实性

当使用SSH密钥到签出库时,可能需要将GitHub或BitBucket的指纹添加到“已知主机”文件(~ / . ssh / known_hosts),以便执行程序可以验证它连接到的主机是真实的。的查看作业步骤会自动执行此操作,因此,如果您选择使用自定义checkout命令,则需要使用以下命令。

mkdir - p ~ /。ssh回声的github.com将AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa + PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31 / yMf + Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB + weqqUUmpaaasXVal72J + UX2B + 2 rpw3rct0eozqgqljl3rkrtjvdsje3jeavgq3lghszxy28g3skua2smvi / w4yCE6gbODqnTWlg7 + wC604ydGXA8VJiS5ap43JXiUFFAaQ = = bitbucket.org将AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl / VqLat MaB33pZy0y3rJZtnqwR2qOOvbwKZYKiEO1O6VqNEBxKvJJelCq0dTXWT5pbO2gDXC6h6QDXCaHo6pOHGPUy + YBaGQRGuSusMEASYiWunYN0vCAI8QaXnWMXNMdFP3jHAJH0eDsoiGnLPBlBp4TNm6rYI74nMzgz3B9IikW4WVK + dc8KZJZWYjAuORU3jc1c / NPskD2ASinf8v3xnfXeukU0sJ5N6m5E8VLjObPEO + mN2t / FZTMZLiFqPWc / ALSqnMnnhwrNi2rbfg / rd / IpL8Le3pSBne8 + seeFVBoGqzHM9yXw == ' >> ~/. ssh / known_hosts

服务器的SSH密钥可以通过运行来获取ssh-keyscan ,然后添加以前缀为前缀的密钥众所周知你的工作文件。您可以在此处看到这一点:

➜〜SSH-键扫描github.com#github.com:22 SSH-2.0-babeld-2e9d163d github.com SSH-RSA AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa + PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31 / YMF + Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB + weqqUUmpaaasXVal72J + UX2B + 2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi / w4yCE6gbODqnTWlg7 + wC604ydGXA8VJiS5ap43JXiUFFAaQ ==#github.com:22 ssh-2.0-babeld-2e9d163d#github.com:22 ssh-2.0-babeld-2e9d163d➜〜✗