云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

云服务器_网站建设重要性_安全稳定

小七 141 0

使用Terraform管理GitHub

Terraform是一个开源工具,用于将基础设施作为代码进行管理。早些时候,我写了一篇关于利用Terraform来利用版本控制的基础设施的博客文章,Terraform继续在"基础设施"的定义上突破界限。Terraform能够使用API管理几乎任何东西,包括consur、Nomad和GitHub。这篇博客文章展示了使用Terraform管理GitHub组织、存储库、团队和权限的案例。»为什么是地形?使用Terraform管理云资源的用例相当简单——编码、版本、自动化、审计、重用和发布。使用Terraform管理GitHub组织、存储库、团队和权限也有同样的好处。您可以立即深入了解并全面了解GitHub组织内部的所有成员资格、存储库和权限。在GitonHub中,员工提交一个新的账户请求,并在GitonHub中添加一个新的账户。招聘经理验证更改并合并请求。在下一次运行Terraform时,更改会传播到GitHub,并授予新的权限。这不仅是在公司完全可见的情况下发生的,而且还确保了一致性。我们不再依赖于人在GitHub的web界面上点击,而是依赖于一台机器来推出策略和访问。无论您是在管理一个拥有数百名GitHub用户的大型企业,还是在您的个人项目中实施一致的标签方案,Terraform都是合适的工具。»提供程序设置为了让Terraform与GitHub的API通信,我们需要配置GitHub Terraform提供程序。Terraform提供程序是API的抽象。就像api需要身份验证一样,Terraform提供者也需要身份验证。在本例中,GitHub Terraform提供程序需要令牌和组织。以下是地形配置示例:提供商"github"{token="a2bcl5…"organization="地形示例"}令牌是您帐户的个人访问令牌。GitHub有关于生成个人访问令牌的优秀文档。组织是对人类友好的组织名称。也可以从环境变量中获取这些值,但这在本文中没有讨论。对于这个帖子,代币必须有回购,管理员:org,并删除存储库权限。GitHub企业用户还可以指定base\u url选项来指向他们的GitHub企业安装。默认值指向publicGitHub.com网站.»创建存储库Terraform可以管理所有GitHub存储库的创建和生命周期。Terraform不会接触到现有的GitHub存储库,因此逐步采用是安全的。下面是创建名为"example repo"的新存储库的示例配置。此存储库将在提供程序中指定的组织中创建。资源"github_repository""示例存储库"{name="回购示例"description="用于Terraform的新存储库"}下一步,运行terraform计划,查看terraform计划在GitHub上做什么更改。$地形图+github公司_存储库.示例-回购默认分支:""description:"用于Terraform的新存储库"完整名称:""git_clone_url:""http克隆url:""name:"示例回购"ssh克隆url:""svn_url:""计划:1表示添加,0表示更改,0表示销毁。现在运行terraform apply以应用更改。这将在GitHub上创建一个真正的存储库。$terraform应用# ...申请完成!资源:添加了1个,更改了0个,销毁了0个。您可以通过访问GitHub上的组织并搜索名为"example repo"的存储库来验证操作是否成功。因为Terraform的语法是声明性的,对配置的任何更改都会导致计算的变更集。要演示这种行为,请在Terraform配置中更改存储库的描述。运行terraform计划时,terraform将报告资源已更改。运行terraform apply时,terraform将更新存储库的描述,但不会更新其他属性。一旦使用Terraform管理资源,它的所有属性都由配置控制。作为练习,请编辑上新创建的存储库的"description"字段GitHub.com网站,然后运行terraform apply。Terraform将检测到差异并对GitHub进行API调用,以强制描述与Terraform配置中的值匹配。地形配置成为真相和政策的唯一来源。»创建团队Terraform不仅支持GitHub存储库的管理,还可以创建GitHub团队并管理这些团队的成员。下面是一个用于创建团队的Terraform配置示例。我们可以在创建GitHub存储库资源的同一个文件中包含此代码。Terraform将智能地处理同一个文件中的两个资源。资源"github_team""示例团队"{name="示例团队"description="我的新团队用于Terraform"privacy="关闭"}与之前一样,运行terraform plan和terraform apply:$地形图github公司_存储库.示例-repo:正在刷新状态。。。(ID:回购示例)+github公司_团队。示例-团队描述:"我的新团队用于Terraform"name:"示例团队"隐私:"关闭"计划:1表示添加,0表示更改,0表示销毁。$terraform应用github公司_存储库.示例-repo:正在刷新状态。。。(ID:回购示例)github公司_团队。示例-团队:正在创建。。。description:"=>"我的新团队用于Terraform"名称:"=>"示例团队隐私:"=>"关闭github公司_团队。示例-团队:创建完成(ID:2326575)申请完成!资源:添加了1个,更改了0个,销毁了0个。Terraform在组织中创建了一个名为"example team"的团队。您可以登录到GitHub并验证团队是否已成功创建,但它将没有成员。Terraform可以使用github_team_membership资源向团队添加成员:资源"github_team_membership""团队成员身份示例"{团队\用户名="米切尔"role="成员"}这将把用户名为"mitchellh"的GitHub用户添加到我们刚刚创建的团队中。我们可以使用Terraform的插值语法来引用先前资源的输出,而不是硬编码team iu id。在内部,这将构建一个依赖关系图,并告诉Terraform在创建团队成员之前创建团队。因为我们的团队已经存在,terraform计划将填充team_id。如果资源不存在,则该参数将标记为。$地形图正在刷新计划前内存中的地形状态。。。github公司_存储库.示例-repo:正在刷新状态。。。(ID:回购示例)github公司_团队。示例-团队:正在刷新状态。。。(编号:2326575)+github_团队_成员资格。示例-团队成员角色:"成员"团队编号:"2326575"用户名:"米切尔"计划:1表示添加,0表示更改,0表示销毁。接下来应用更改:$terraform应用github公司_存储库.示例-repo:正在刷新状态。。。(ID:回购示例)github公司_团队。示例-团队:正在刷新状态。。。(编号:2326575)github_团队_成员资格。示例-团队成员身份:正在创建。。。角色:"=>"成员团队编号:"=>"2326575用户名:""=>"米切尔"github_团队_成员资格。示例-团队成员:创建完成(ID:2326575:mitchellh)申请完成!资源:添加了1个,更改了0个,销毁了0个。我们可以通过查看GitHub web界面来验证团队的创建。»将团队添加到存储库到目前为止,我们已经创建了一个GitHub存储库GitHub团队,并向该GitHub团队添加了一名成员。为了让整个旅程循环,我们可以使用Terraform github_team_repository资源授予团队对新创建的存储库的权限。资源"github_team_repository""团队存储库示例"{团队\repository="${github_存储库.示例-回购名称}"permission="推送"}和以前一样,运行terraform plan和terraform apply。$地形图正在刷新计划前内存中的地形状态。。。github公司_团队。示例-团队:正在刷新状态。。。(编号:2326575)github公司_存储库.示例-repo:正在刷新状态。。。(ID:回购示例)github_团队_成员资格。示例-团队成员身份:正在刷新状态。。。(编号:2326575:mitchellh)+github_团队_存储库.示例-团队回购许可:"推"存储库:"示例回购"团队编号:"2326575"计划:1表示添加,0表示更改,0表示销毁。$terraform应用github公司_团队。示例-团队:正在刷新状态。。。(编号:2326575)github公司_存储库.示例-正在刷新状态回购。。。(ID:回购示例)github_团队_成员资格。示例-团队成员身份:正在刷新状态。。。(编号:2326575:mitchellh)github_团队_存储库.示例-团队回购:正在创建。。。权限:"=>"推送"存储库:"=>"示例回购团队编号:"=>"2326575github_团队_存储库.示例-团队回购:创建完成(ID:2326575:示例回购)申请完成!资源:添加了1个,更改了0个,销毁了0个。现在,"example team"团队的成员拥有对"example repo"存储库的推拉访问权。»好处:设置存储库标签许多组织都有一组通用的存储库标签,他们喜欢将其应用于所有项目。这有助于确保项目之间的一致性和一致性。这些标签可能与衡量问题进度或指标的内部系统相关联。过去,跨存储库管理这些标签是一个手动过程,或者涉及到使用githubapi构建工具。这两种方法的挑战在于,它们要求用户考虑幂等性、更改和卷展效果。使用Terraform,可以很容易地跨所有GitHub存储库管理问题标签和颜色。更好的是,这些标签在Terraform配置中以声明方式进行管理,因此任何更改对组织都是可见的。这个例子也是