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

相关推荐
程序员爱钓鱼1 分钟前
Go语言实战案例-创建模型并自动迁移
后端·google·go
javachen__7 分钟前
SpringBoot整合P6Spy实现全链路SQL监控
spring boot·后端·sql
uzong6 小时前
技术故障复盘模版
后端
GetcharZp6 小时前
基于 Dify + 通义千问的多模态大模型 搭建发票识别 Agent
后端·llm·agent
桦说编程6 小时前
Java 中如何创建不可变类型
java·后端·函数式编程
IT毕设实战小研6 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
wyiyiyi7 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
阿华的代码王国8 小时前
【Android】RecyclerView复用CheckBox的异常状态
android·xml·java·前端·后端
Jimmy8 小时前
AI 代理是什么,其有助于我们实现更智能编程
前端·后端·ai编程
AntBlack8 小时前
不当韭菜V1.1 :增强能力 ,辅助构建自己的交易规则
后端·python·pyqt