作者:Intakhab Ali,MayaData软件工程师
本博客最初于2020年1月28日发表在MayaData的博客上。
https://blog.mayadata.io/openebs/setup-continuous-integration-for-helm-chart
Helm是Kubernetes的一个包管理器,它允许开发人员和操作人员轻松地将应用程序和服务打包、配置和部署到Kubernetes集群中。
建立Helm chart的持续集成
Helm现在是Kubernetes的一个官方项目,并且是云原生计算基金会的一部分,这是一个非盈利的Linux基金会,它支持Kubernetes生态系统中的开源项目。
在本教程中,我们将建立一个持续集成的Helm chart。我们将在CI工具(如Travis、Jenkins)的帮助下打包Helm chart,并将其推入到chart注册中心(如Harbor、Chartmuseum)。
先决条件:
我将使用Travis作为CI平台和Harbor作为Helm注册中心托管helm。
我选择Travis,.travis.yml由工作生命周期组成。我们写一下helm chart的工作周期。
生命周期1:
选择Python为基础语言
---
language: python
我们需要一些环境变量,这样我们就可以随时更新Helm发行版的新版本或注册表URL的更改。
下面是我们需要的变量列表:
它是这样的
env:
global:
- HELM_URL=https://storage.googleapis.com/kubernetes-helm
- HELM_TGZ=helm-v2.4.2-linux-amd64.tar.gz
- REPO_DIR=/home/travis/build/inyee786/test-helm
- YAMLLINT_VERSION=1.8.1
- HARBOR_CHART_URL=https://harbor-
test.mayadata.io/chartrepo
- HARBOR_PROJECT_NAME=maya
- CHART_FOLDER=charts
我们需要一些私有变量,我们可以在其中存储凭据并将其推到Helm注册中心(Harbor有一个出色的特性,我们可以在其中拥有bot用户,您可以使用bot凭据)。我们要喂的是-
HARBOR_USERNAME:
HARBOR_PASSWORD:
在Travis里,转到(settings > Environment Variables)来设置私有环境
生命周期2:
安装CI环境以构建和检查YAML lint的先决条件。
下载helm并在下载后untar chart
初始化helm客户端并更新helm仓库
安装helm插件来推送chart到注册中心
安装yamllint python包来检查lint
它看起来像下面的配置
install:
# Installing Helm
- wget ${HELM_URL}/${HELM_TGZ}
- tar xzfv ${HELM_TGZ}
- PATH=`pwd`/linux-amd64/:$PATH
- helm init --client-only
# helm plugin to push helm chart
- helm plugin install https://github.com/chartmuseum/helm-
push --version v0.7.1
# Installing pip deps
- sudo pip install yamllint=="${YAMLLINT_VERSION}"
- helm repo update
生命周期3:
在进一步构建chart之前,我们需要运行一些脚本来检查chart和Travis文件中的lint。检查lint是个好习惯。
检查所有Helm chart的Helm lint
为travis.yml、chart.yaml和value.yaml检查YAML lint,我们使用yamllint python包。我们需要规则来检查lint。
脚本部分应该如下面的配置所示
script:
# Check charts format
- >
for dir in `ls ${REPO_DIR}/${CHART_FOLDER}`; do
helm lint ${REPO_DIR}/${CHART_FOLDER}/$dir
if [ $? != 0 ]; then
travis_terminate 1
fi
done
# Check YAML styling
- yamllint -c .yamllint.yml -s .travis.yml .yamllint.yml
- yamllint -c .yamllint.yml -s $(find . -type f -name "Chart.yaml")
- yamllint -c .yamllint.yml -s $(find . -type f -name "values.yaml")
接下来是有趣的部分,我们将构建和打包chart。
生命周期4:
当我们在主分支中合并chart时,最好是构建和推送。因此,当我们在主分支中合并chart时,我们运行以下命令。
我们需要一个临时目录来构建和打包chart
对所有chart运行一个循环来构建、打包并将其推入注册中心。下面的命令将在每个chart上运行
使用下面的命令打包chart
然后将chart推送到注册中心
下面是配置的样子
# Temporary dir for storing new packaged charts and index files
BUILD_DIR=$(mktemp -d) # Push temporary directory to the stack
pushd $BUILD_DIR # Iterate over all charts are package them push it to Harbor
for dir in `ls ${REPO_DIR}/${CHART_FOLDER}`; do
helm dep update ${REPO_DIR}/${CHART_FOLDER}/$dir
helm package ${REPO_DIR}/${CHART_FOLDER}/$dir
helm push --username ${HARBOR_USERNAME} --password ${HARBOR_PASSWORD} ${REPO_DIR}/${CHART_FOLDER}/$dir ${HARBOR_CHART_URL}/maya
if [ $? != 0 ]; then
travis_terminate 1
fi
done# Pop temporary directory from the stack
popd
哇!我们已经成功地完成了所有的步骤。现在,我们的安装程序已经准备好构建并将helm chart推送到注册中心。
这是完整的Travis文件
https://gist.github.com/inyee786/d779f347d7fa272aed4ee8457182af35
这是.yamllint.yml,包含用于检查chart.yaml、value.yaml和travis.yml的lint规则
https://gist.github.com/inyee786/ef15b05c98bb4761b41af5f4fe268239
总结
在这里,我们打包了Helm chart,并推送它到Helm的注册中心。
关于我
你可以关注我下面,可以问任何关于Angular、JavaScript、Travis、Kubernetes等的问题。