Chart Releaser
我们已经有了一套的 Helm Charts ,想办法把他们串起来发布出去,此时想着可以使用 chart releaser 来实现了。
我们的仓库地址是:https://github.com/openimsdk/helm-charts/
我们来介绍两种工具
- cr: https://github.com/helm/chart-releaser
- ct: https://github.com/helm/chart-testing
CR
使用的工具 GitHub 地址:https://github.com/helm/chart-releaser
帮助将GitHub存储库转换为Helm Chart存储库
简称为 CR:cr-release-packages
cr
是一个工具,旨在帮助GitHub存储库自托管自己的图表存储库,方法是将Helm图表工件添加到以图表版本命名的GitHub发布版本中,然后为可以托管在GitHub Pages(或其他地方!)上的这些发布版本创建index.yaml
文件。
安装
Binaries (recommended) 二进制文件(推荐)
从版本页面下载您的首选资产并手动安装。
$ brew tap helm/tap
$ brew install chart-releaser
目前, cr
可以从打包到目录中的一组图表创建GitHub Releases,并从GitHub Releases为图表存储库创建 index.yaml
文件。
❯ cr
Create Helm chart repositories on GitHub Pages by uploading Chart packages
and Chart metadata to GitHub Releases and creating a suitable index file
Usage:
cr [command]
Available Commands:
completion Generate the autocompletion script for the specified shell
help Help about any command
index Update Helm repo index.yaml for the given GitHub repo
package Package Helm charts
upload Upload Helm chart packages to GitHub Releases
version Print version information
Flags:
--config string Config file (default is $HOME/.cr.yaml)
-h, --help help for cr
Use "cr [command] --help" for more information about a command.
解析可以用的命令:
completion
生成指定 shell 的自动补全脚本。这有助于在使用cr
命令时自动提示可用的命令和参数。help
提供关于任何命令的帮助信息。index
为给定的 GitHub 仓库更新 Helm 仓库的index.yaml
文件。这个文件是 Helm 仓库的索引,包含了仓库中所有图表的信息。package
打包 Helm 图表。这个过程通常涉及将图表源代码(通常是一组 YAML 文件)打包成一个压缩文件,以便发布和分发。upload
将 Helm 图表包上传到 GitHub Releases。这是将 Helm 图表发布到 GitHub 仓库的一种方式。version
打印cr
工具的版本信息。
从Helm Chart软件包创建GitHub版本
扫描Helm chart包的路径,并在指定的GitHub存储库中创建发布,上传包。
$ cr upload --help
Upload Helm chart packages to GitHub Releases
Usage:
cr upload [flags]
Flags:
-c, --commit string Target commit for release
--generate-release-notes Whether to automatically generate the name and body for this release. See https://docs.github.com/en/rest/releases/releases
-b, --git-base-url string GitHub Base URL (only needed for private GitHub) (default "https://api.github.com/")
-r, --git-repo string GitHub repository
-u, --git-upload-url string GitHub Upload URL (only needed for private GitHub) (default "https://uploads.github.com/")
-h, --help help for upload
-o, --owner string GitHub username or organization
-p, --package-path string Path to directory with chart packages (default ".cr-release-packages")
--release-name-template string Go template for computing release names, using chart metadata (default "{{ .Name }}-{{ .Version }}")
--release-notes-file string Markdown file with chart release notes. If it is set to empty string, or the file is not found, the chart description will be used instead. The file is read from the chart package
--skip-existing Skip upload if release exists
-t, --token string GitHub Auth Token
--make-release-latest bool Mark the created GitHub release as 'latest' (default "true")
--packages-with-index Host the package files in the GitHub Pages branch
Global Flags:
--config string Config file (default is $HOME/.cr.yaml)
从GitHub Releases创建存储库索引
上传后,您可以创建一个可以托管在GitHub Pages(或其他地方)上的 index.yaml
文件。
$ cr index --help
Update a Helm chart repository index.yaml file based on a the
given GitHub repository's releases.
Usage:
cr index [flags]
Flags:
-b, --git-base-url string GitHub Base URL (only needed for private GitHub) (default "https://api.github.com/")
-r, --git-repo string GitHub repository
-u, --git-upload-url string GitHub Upload URL (only needed for private GitHub) (default "https://uploads.github.com/")
-h, --help help for index
-i, --index-path string Path to index file (default ".cr-index/index.yaml")
-o, --owner string GitHub username or organization
-p, --package-path string Path to directory with chart packages (default ".cr-release-packages")
--pages-branch string The GitHub pages branch (default "gh-pages")
--pages-index-path string The GitHub pages index path (default "index.yaml")
--pr Create a pull request for index.yaml against the GitHub Pages branch (must not be set if --push is set)
--push Push index.yaml to the GitHub Pages branch (must not be set if --pr is set)
--release-name-template string Go template for computing release names, using chart metadata (default "{{ .Name }}-{{ .Version }}")
--remote string The Git remote used when creating a local worktree for the GitHub Pages branch (default "origin")
-t, --token string GitHub Auth Token (only needed for private repos)
--packages-with-index Host the package files in the GitHub Pages branch
Global Flags:
--config string Config file (default is $HOME/.cr.yaml)
Docker镜像被推送到 helmpack/chart-martaser
Quay容器注册表。Docker镜像构建在Alpine之上,其默认入口点是 cr
。有关更多详细信息,请参阅Dockerfile。
Usage 使用
以下是您必须运行的三个命令,以使图表最终托管在Github页面的根目录中并可访问:
cr package <chart>
cr upload --owner <owner> --git-repo <repo_name> --packages-with-index --token <token> --push --skip-existing
不要忘记在upload命令中使用 --skip-existing
标志,以避免出现 422 Validation Failed
错误。
cr index --owner <owner> --git-repo <repo_name> --packages-with-index --index-path . --token <token> --push
例如
在仓库的根目录中使用testChart helm chart:
cr package testChart/
如果你将在中获得 .tgz
。/cr-release-pacakges
那么你要执行下面两个命令:
cr upload --owner <owner> --git-repo <repo_name> --packages-with-index --token <token> --push --skip-existing
cr index --owner <owner> --git-repo <repo_name> --packages-with-index --index-path . --token <token> --push
你应该在你的github-pages分支的根目录中获得你的图表和 .tgz
的版本。
使用引用每个图表和这些图表的每个不同版本的 index.yaml
:
配置
cr
是一个命令行应用。所有命令行标志也可以通过环境变量或配置文件设置。环境变量必须以 CR_
为前缀。必须使用下划线而不是连字符。
CLI标志、环境变量和配置文件可以混合使用。以下优先顺序适用:
- CLI标志
- 环境变量
- Config文件
Examples
下面的示例显示了配置同一事物的各种方法:
CLI
cr upload --owner myaccount --git-repo helm-charts --package-path .deploy --token 123456789
环境变量
export CR_OWNER=myaccount
export CR_GIT_REPO=helm-charts
export CR_PACKAGE_PATH=.deploy
export CR_TOKEN="123456789"
export CR_GIT_BASE_URL="https://api.github.com/"
export CR_GIT_UPLOAD_URL="https://uploads.github.com/"
export CR_SKIP_EXISTING=true
cr upload
--package-path string
is Path to directory with chart packages (default .cr-release-packages
)
Config文件
config.yaml
:
owner: myaccount
git-repo: helm-charts
package-path: .deploy
token: 123456789
git-base-url: https://api.github.com/
git-upload-url: https://uploads.github.com/
配置使用
cr upload --config config.yaml
cr
支持Viper可以读取的任何格式。e. JSON、TOML、YAML、HCL和Java属性文件。
请注意,如果没有指定配置文件,则从当前目录加载 cr.yaml
(或任何支持的格式),如果找到,则按此顺序加载 $HOME/.cr
或 /etc/cr
。
CT
ct
是测试Helm Charts的工具。它旨在用于linting和测试pull请求。它自动检测针对目标分支更改的图表。
安装
建议使用提供的Docker镜像,该镜像可以在Quay上找到。它配备了所有必要的工具安装。
上手
下面的例子显示了配置同一件事的各种方法:
With remote repo:
ct install --remote upstream --chart-dirs stable,incubator --build-id pr-42
本地回购:
如果您在当前目录中有一个图表,并且ct安装在主机上,那么您可以运行:
ct install --chart-dirs . --charts .
使用Docker时,它可以使用:
docker run -it --network host --workdir=/data --volume ~/.kube/config:/root/.kube/config:ro --volume $(pwd):/data quay.io/helmpack/chart-testing:v3.7.1 ct install --chart-dirs . --charts .
请注意, workdir
param很重要,必须与挂载的卷相同。
环境变量
export CT_REMOTE=upstream
export CT_CHART_DIRS=stable,incubator
export CT_BUILD_ID
ct install
Config文件
config.yaml
:
remote: upstream
chart-dirs:
- stable
- incubator
build-id: pr-42
配置使用
ct install --config config.yaml
ct
支持Viper可以读取的任何格式。e. JSON、TOML、YAML、HCL和Java属性文件。
请注意,如果没有指定配置文件,则从当前目录加载 ct.yaml
(或任何支持的格式),如果找到,则按此顺序加载 $HOME/.ct
或 /etc/ct
。
使用私有图表存储库
在添加chart-repos时,您可以在每个repo的基础上使用 helm-repo-extra-args
为 helm repo add
命令指定其他参数。您还可以指定OCI注册表,这些注册表将使用 helm registry login
命令添加,它们也支持 helm-repo-extra-args
进行身份验证。例如,这可以用于验证私有图表存储库。
config.yaml
:
chart-repos:
- incubator=https://incubator.io
- basic-auth=https://private.com
- ssl-repo=https://self-signed.ca
- oci-registry=oci://nice-oci-registry.pt
helm-repo-extra-args:
- ssl-repo=--ca-file ./my-ca.crt
ct install --config config.yaml --helm-repo-extra-args "basic-auth=--username user --password secret"
OpenIM Helm Charts 的 CICD 设计
OpenIM 的 CICD 设计使用了上续的 ct 和 cr 的工具,目录设计主要是三个部分:
+ .github/config/ # 存放配置文件 包括 ct 和 cr 的配置文件
+ scripts/ # 存放本地和其他的自动化脚本