前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >建立Helm chart的持续集成

建立Helm chart的持续集成

作者头像
CNCF
发布2020-02-26 13:13:32
1.1K0
发布2020-02-26 13:13:32
举报
文章被收录于专栏:CNCFCNCF

作者: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)。

先决条件:

  • 像Harbor或Chartmuseum那样存放Helm的注册中心
  • 了解Helm和任何CI平台(Travis、Jenkins、circle、CI)
  • 一个Git仓库来维护helm chart的版本控制

我将使用Travis作为CI平台和Harbor作为Helm注册中心托管helm。

我选择Travis,.travis.yml由工作生命周期组成。我们写一下helm chart的工作周期。

生命周期1:

选择Python为基础语言

---
language: python

我们需要一些环境变量,这样我们就可以随时更新Helm发行版的新版本或注册表URL的更改。

下面是我们需要的变量列表:

  • HELM_URL=https://storage.googleapis.com/kubernetes-helm (this is the URL where we can download the helm package)
  • HELM_TGZ=helm-v2.4.2-linux-amd64.tar.gz (this is the Helm tar filename)
  • REPO_DIR=/home/travis/build/inyee786/test-helm (this is the path where Travis keep Git folder)
  • YAMLLINT_VERSION=1.8.1 (this is yamllint version which is used to check lint of file)
  • HARBOR_CHART_URL=https://harbor-test.mayadata.io/chartrepo (change this according to your chart registry url{harbor or Chartmuseum}
  • HARBOR_PROJECT_NAME=maya (this is the Harbor project name, where we will store the chart)
  • CHART_FOLDER=charts (this is the folder name, where we can keep the Helm charts)

它是这样的

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

  • wget ${HELM_URL}/${HELM_TGZ}
  • tar xzfv ${HELM_TGZ}
  • PATH=`pwd`/linux-amd64/:$PATH

初始化helm客户端并更新helm仓库

  • Helm init — client-only
  • Helm repo update

安装helm插件来推送chart到注册中心

  • Helm plugin install https://github.com/chartmuseum/helm-push — version v0.7.1

安装yamllint python包来检查lint

  • sudo pip install yamllint==”${YAMLLINT_VERSION}”

它看起来像下面的配置

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

  • For dir in `ls ${REPO_DIR}/${CHART_FOLDER}`; do helm lint ${REPO_DIR}/${CHART_FOLDER}/$dir if [ $? != 0 ]; then travis_terminate 1 fi

为travis.yml、chart.yaml和value.yaml检查YAML lint,我们使用yamllint python包。我们需要规则来检查lint。

  • 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”)

脚本部分应该如下面的配置所示

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

  • BUILD_DIR=$(mktemp -d)

对所有chart运行一个循环来构建、打包并将其推入注册中心。下面的命令将在每个chart上运行

  • helm dep update ${REPO_DIR}/${CHART_FOLDER}/$dir

使用下面的命令打包chart

  • helm package ${REPO_DIR}/${CHART_FOLDER}/$dir

然后将chart推送到注册中心

  • helm push — username ${HARBOR_USERNAME} — password ${HARBOR_PASSWORD} ${REPO_DIR}/${CHART_FOLDER}/$dir ${HARBOR_CHART_URL}/maya

下面是配置的样子

# 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等的问题。

  • GitHub https://github.com/inyee786/
  • Linkedin https://www.linkedin.com/in/intakhab-ali/
  • Medium https://medium.com/@intakhab.cusat
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CNCF 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档