$ wget https://get.helm.sh/helm-v2.16.0-linux-amd64.tar.gz
$ tar -zvf helm-v2.16.0-linux-amd64.tar.gz
$ cd linux-amd64/
$ cp helm /usr/local/bin
複製代碼
helm version
Client: &version.Version{SemVer:"v2.16.0", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.16.0", itTreeState:"clean"}
複製代碼
$ helm init --client-only
$ helm plugin install https://github.com/chartmuseum/helm-push
複製代碼
$ helm repo remove stable
$ helm repo add ali https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
複製代碼
stages:
- test
- deploy
# test job
job 1:
stage: test
only:
- master
tags:
- tag-test
script: echo "單元測試"
# deploy 階段把 docker build 和 k8s部署 放在一個階段
job 2:
stage: deploy
only:
- master
tags:
- tag-test
script:
- echo "Deploy ..."
# deploy 本身寫的python部署腳本
# helm.yaml helm values配置文件
# product-line 產品線
# project-name 項目名稱,若是多分支能夠使用 project-name-$CI_COMMIT_REF_NAME
# $(date "+%Y%m%d%H%M%S")-${CI_COMMIT_SHA:0:6} docker tag
# Dockerfile 構建項目dockerfile
- deploy -f helm.yaml product-line project-name $(date "+%Y%m%d%H%M%S")-${CI_COMMIT_SHA:0:6} Dockerfile
when: manual
複製代碼
YP小站
公衆號並回復 獲取deploy代碼
#!/usr/bin/env python3
import sys
import os
import getopt
import yaml
import pykube
def usage():
print("Usage: %s [ -b | --build-arg | -f | --file ] product-line project-name docker_images_version dockerfile_name --no-cache" % sys.argv[0], "\n", "or",
"Usage: %s [ -b | --build-arg | -f | --file ] product-line project-name docker_images_version dockerfile_name" % sys.argv[0], "\n\n",
"-b, --build-arg 聲明Dockerfile中環境變量,參數能夠指定屢次,示例 A=b, ", "\n",
"-f, --file 指定Helm values.yaml文件,參數只能指定一次,指定多個也只會取第一個值")
def check_item_exists(project, server_name, docker_images_version, *args):
api = pykube.HTTPClient(pykube.KubeConfig.from_file("k8s config"))
deploy = pykube.Deployment.objects(api).filter(namespace=project)
os.environ['project'] = str(project)
os.environ['server_name'] = str(server_name)
os.environ['docker_images_version'] = str(docker_images_version)
os.environ['s_name'] = str(server_name)
if args:
os.environ['helm_values_file'] = str(args[0])
if os.system('helm status $server_name 1> /dev/null 2>&1') == 0:
os.system("echo '\033[1;32;40m' 'Helm滾動發佈、超時爲5分鐘、失敗在本次基礎上自動回滾上一個版本。' '\033[0m \n'")
os.system('helm upgrade --timeout 300 --atomic --install $server_name --namespace $project \ --set serverName=$server_name --set image.project=$project \ --set serverFeatureNameReplace=$server_name \ --set image.tag=$docker_images_version "Helm warehouse address" $helm_values_file')
return
else:
# 兼容過去沒有使用Helm部署
for deployment in deploy:
if server_name == str(deployment):
# deployment進行滾動升級
os.system('kubectl set image deployment/$server_name \ $server_name=harbor.example.com/$project/$server_name:$docker_images_version \ --namespace=$project')
return
# 部署新項目
# 使用helm模板部署服務
os.system('helm install --name $server_name --namespace $project \ --set serverName=$server_name --set image.project=$project \ --set serverFeatureNameReplace=$server_name \ --set image.tag=$docker_images_version "Helm warehouse address" $helm_values_file')
return
複製代碼
blog.csdn.net/ygqygq2/art…python
歡迎你們關注交流,按期分享自動化運維、DevOps、Kubernetes、Service Mesh和Cloud Native
linux