发布你自己的 terraform provider

概述

Terraform Providers是Terraform生态系统的关键组成部分,用于连接和管理各种基础设施和云服务。如果你已经开发了自己的Terraform Provider,并且现在希望发布它供其他人使用,本文将为你提供一步步的指南。

步骤1:准备工作

在发布之前,确保你的Terraform Provider代码已经经过充分的测试,并且你已经解决了任何可能的bug。确保你的代码符合HashiCorp的最佳实践

步骤2:创建GitHub仓库

将你的Terraform Provider代码推送到GitHub仓库。确保你的仓库中包含适当的文档,以便其他人能够理解如何使用你的Provider。

重要提示:为了能够被 Terraform 注册表检测到,GitHub 上的所有提供程序存储库都必须匹配模式 terraform-provider-{NAME} ,并且存储库必须是公共的。仅支持小写存储库名称。

步骤3:准备并添加签名密钥

所有提供商版本都需要签名,因此您必须向 HashiCorp 提供用于签署版本的 GPG 密钥对的公钥。 Terraform 注册表将在发布每个版本时验证该版本是否使用此密钥进行签名,并且 Terraform 将在 terraform init 期间验证这一点。

要准备并添加签名密钥:

  1. 生成签名版本时使用的 GPG 密钥。此步骤请参考 GitHub 的详细说明,但不需要将密钥添加到GitHub
  2. 使用以下命令以 ASCII-armor 格式导出您的公钥。替换在上一步中创建的 GPG 密钥 ID。
shell 复制代码
gpg --armor --export "{Key ID or email address}"
  1. 在 Terraform 注册表中,单击用户设置 > 签名密钥以添加 ASCII 公钥。您可以为您的个人命名空间或您作为管理员的任何组织添加密钥。

步骤4:创建Release

我们通过执行 github workflow 来自动发布我们的版本,只需要打tag来触发,需要注意的是,tag 要符合语义化版本号(Semantic Versioning),例如v1.0.0。我们需要再 secret 中填入私钥和密码

yaml 复制代码
# Terraform Provider release workflow.
name: Release

# This GitHub action creates a release when a tag that matches the pattern
# "v*" (e.g. v0.1.0) is created.
on:
  push:
    tags:
      - 'v*'

# Releases need permissions to read and write the repository contents.
# GitHub considers creating releases and uploading assets as writing contents.
permissions:
  contents: write

jobs:
  goreleaser:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
        with:
          # Allow goreleaser to access older tag information.
          fetch-depth: 0
      - uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0
        with:
          go-version-file: 'go.mod'
          cache: true
      - name: Import GPG key
        uses: crazy-max/ghaction-import-gpg@82a020f1f7f605c65dd2449b392a52c3fcfef7ef # v6.0.0
        id: import_gpg
        with:
          gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }}
          passphrase: ${{ secrets.PASSPHRASE }}
      - name: Run GoReleaser
        uses: goreleaser/goreleaser-action@7ec5c2b0c6cdda6e8bbb49444bc797dd33d74dd8 # v5.0.0
        with:
          args: release --clean
        env:
          # GitHub sets the GITHUB_TOKEN secret automatically.
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          GPG_FINGERPRINT: ${{ steps.import_gpg.outputs.fingerprint }}

执行过工作流后,发布页面会出现编译好的各平台的二进制:

步骤5:在 terraform registry 中注册

terraform registry 会验证你的仓库是否名称符合 terraform-provider-xx , 会验证 release 页面有发布过制品,符合条件后会在你的github上创建一个 webhooks,当你发布更新后,会通知 terraform 同时更新

结语

通过遵循这些步骤,你成功地发布你的Terraform Provider,使其能够被更广泛地被全球所有开发者使用。不断维护和更新你的Provider,以确保它与最新的Terraform版本和基础设施服务保持兼容。发布Terraform Provider是贡献给社区的一种方式,也是分享你的技术成果的机会。关于本教程代码,你可以查看 github.com/mouuii/terr...

本文由mdnice多平台发布

相关推荐
颜酱3 分钟前
# 02 | 搭骨架:用 LangGraph 编排 12 步工作流(思路)
前端·人工智能·后端
颜酱4 分钟前
02 | 搭骨架:用 LangGraph 编排 12 步工作流
前端·人工智能·后端
嘉伟桑1 小时前
Python调用电价API返回JSON示例:分时电价、现货电价和字段解析
后端
武子康1 小时前
Shippy:确定性工具、会话级 Sandbox 与 Live-Data Eval(4 类收敛 + 7 步实现方案 + 6 类评测指标)
前端·人工智能·后端
我叫黑大帅2 小时前
我为什么单一消费者的场景下,要用 Redis List 当消息队列?
redis·后端·面试
AskHarries2 小时前
文件上传系统
后端
止语Lab3 小时前
好的 DX 不等于少写代码——三种语言的摩擦力设计课
后端
吃饱了得干活3 小时前
别再手动解析 LLM 输出了!LangChain 四种结构化输出方案对比
后端·python·langchain
程序员天天困3 小时前
Arthas trace 命令怎么用?一行定位最慢那行代码
jvm·后端
Huiturn3 小时前
GPT 5.6 连续编码 10 小时,纯 Python 啃下 Word 二进制格式——doc2docx 实现拆解
后端