发布你自己的 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多平台发布

相关推荐
Dear.爬虫5 分钟前
Golang中逃逸现象, 变量“何时栈?何时堆?”
开发语言·后端·golang
努力的小郑1 小时前
MySQL索引(三):字符串索引优化之前缀索引
后端·mysql·性能优化
IT_陈寒1 小时前
🔥3分钟掌握JavaScript性能优化:从V8引擎原理到5个实战提速技巧
前端·人工智能·后端
程序员清风2 小时前
贝壳一面:年轻代回收频率太高,如何定位?
java·后端·面试
考虑考虑2 小时前
Java实现字节转bcd编码
java·后端·java ee
AAA修煤气灶刘哥2 小时前
ES 聚合爽到飞起!从分桶到 Java 实操,再也不用翻烂文档
后端·elasticsearch·面试
爱读源码的大都督3 小时前
Java已死?别慌,看我如何用Java手写一个Qwen Code Agent,拯救Java
java·人工智能·后端
星辰大海的精灵3 小时前
SpringBoot与Quartz整合,实现订单自动取消功能
java·后端·算法
天天摸鱼的java工程师3 小时前
RestTemplate 如何优化连接池?—— 八年 Java 开发的踩坑与优化指南
java·后端
一乐小哥3 小时前
一口气同步10年豆瓣记录———豆瓣书影音同步 Notion分享 🚀
后端·python