无论本地储存或者把helm chart文件直接放在项目里面多少有点显得臃肿不方便,尤其对于我这种洁癖的来说就很烦。虽然有着类似helmMuseum的开源chart repo,但是搭建一个自己的还是更加舒服不是吗?而且继续薅Github的羊毛不香么?而且看官方说明也是支持薅羊毛的???

Helm chart repo原理很简单。首先,index.yaml文件里存储着这个helm repo里所有的chart的各版本信息以及地址,helm cli添加repo的操作就是获取这个index.yaml内信息;部署一个chart的时候就从index.yaml指示的地址获取到chart的压缩包进行部署就完成了。所以对应过来,我们需要一个网络服务器使得index.yaml可以被访问,还需要一个对象存储类似的储存各个chart的压缩包;这里白嫖方法也就是使用Github Pages来发布index.yaml,使用Github Release来发布各个压缩包,发布流程可以选择本地推送打包好的chart也可以直接使用Github Action进行打包并推送。当然我们这就选择将白嫖进行到底咯~

建立Github仓库

建立一个repo,需要是public的以便使用Github Pages。选择将各个chart存放在main分支的charts目录下,建立gh-pages分支作为Github Pages的分支来发布index.yaml,效果如下:

image-20211119221310931

Settings->pages里开启Github Pages,源就是gh-pages分支,为了方便记忆地址装逼这里使用了自定义域名并启用强制https。自定义域名很简单,只要在域名的云解析处将helm-charts.clemon.icu域名设置CNAMEcjw7360.github.io

image-20211119221729390

到这里基本的仓库准备已经好了~

设置Github Action

main分支下新建workflow:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
name: Release Charts

on:
push:
branches:
- main

jobs:
release:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
with:
fetch-depth: 0

- name: Configure Git
run: |
git config user.name "$GITHUB_ACTOR"
git config user.email "$GITHUB_ACTOR@users.noreply.github.com"
- name: Install Helm
uses: azure/setup-helm@v1
with:
version: v3.7.1

- name: Run chart-releaser
uses: helm/chart-releaser-action@v1.2.1
with:
charts_dir: charts
# config: cr.yaml
charts_repo_url: https://helm-charts.clemon.icu
env:
CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}"

这里不得不夸一夸官方了,helm/chart-releaser-action@v1.2.1无脑一键解决方案,简直是杀人放火居家必备~

  • charts_repo_url是自定义的那个域名,注意一定要加http/https
  • charts_dir是chart存放的目录

高端的操作往往只需要最简单的享用

main分支的charts下推送一个chart后,CI就会自动打包发布。发布用的版本号就是Chart.yaml里面的version,注意并不是每次push都会发布新的,仅仅在这个版本好变化时才会发布新的chrat。这里我做了frps的chart和本blog的chart,效果还是可以的:

image-20211119222702292

下面试试本地添加这个chart:

1
2
helm repo add clemon https://helm-charts.clemon.icu
helm repo update

搜索下刚刚frps chart:

image-20211119222954462

perfect~

最后测试部署:

image-20211119223123323

到这里就算大功告成了~