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

相关推荐
苹果酱056720 分钟前
一文读懂SpringCLoud
java·开发语言·spring boot·后端·中间件
掐指一算乀缺钱41 分钟前
SpringBoot 数据库表结构文档生成
java·数据库·spring boot·后端·spring
计算机学姐3 小时前
基于python+django+vue的影视推荐系统
开发语言·vue.js·后端·python·mysql·django·intellij-idea
JustinNeil3 小时前
简化Java对象转换:高效实现大对象的Entity、VO、DTO互转与代码优化
后端
青灯文案13 小时前
SpringBoot 项目统一 API 响应结果封装示例
java·spring boot·后端
微尘84 小时前
C语言存储类型 auto,register,static,extern
服务器·c语言·开发语言·c++·后端
计算机学姐4 小时前
基于PHP的电脑线上销售系统
开发语言·vscode·后端·mysql·编辑器·php·phpstorm
码拉松5 小时前
千万不要错过,优惠券设计与思考初探
后端·面试·架构
白总Server6 小时前
MongoDB解说
开发语言·数据库·后端·mongodb·golang·rust·php
计算机学姐6 小时前
基于python+django+vue的家居全屋定制系统
开发语言·vue.js·后端·python·django·numpy·web3.py