目录
一、前言
1、目标环境
1.1 线上环境是IDC机房一组老旧的实体PC服务器,操作系统是CentOS6.5。
1.2 测试环境是本地机房一组裸机,不过为了让团队了解K8S环境,申请开了几个虚拟机安装K8S测试环境。
所以定制的部署流程要能同时具备向裸机环境部署的能力,也要具备在K8S集群中部署的能力。
2、部署工具
AnsibleDeploy 是一个管理并执行Ansible脚本的Web工具,我将在这里定制适合自己团队的部署流程。
3、效果展示
这里只例举K8S环境的定制效果。
1)添加的操作
第二章将详述部分操作的配置:构建发布并部署、回滚、重启、节点、日志
2)支持Gitlab指定分支提交后自动触发部署操作
- 操作记录
- AnsibleDeploy触发器设置
- gitlab的CI配置文件.gitlab-ci.yml
deploy-to-test-k8s:
script: curl -d "projectTag=$PROJECT_NAME:qa" -d "git_branches=$CI_BUILD_REF_NAME" -d "token=***" -X POST http://deploy.mydomain.com:8062/api/triggers/jobs
only:
- develop
deploy-to-online-green:
script: curl -d "projectTag=$PROJECT_NAME:online" -d "git_branches=$CI_BUILD_REF_NAME" -d "token=***" -X POST http://deploy.mydomain.com:8062/api/triggers/jobs
only:
- /^release/green-.*$/
- /^hotfix/green-.*$/
deploy-to-online-blue:
script: curl -d "projectTag=$PROJECT_NAME:blue" -d "git_branches=$CI_BUILD_REF_NAME" -d "token=***" -X POST http://192.168.0.100:8062/api/triggers/jobs
only:
- /^release/blue-.*$/
- /^hotfix/blue-.*$/
3)支持手动指定分支进行部署
4)日志样例
见文末附录
二、流程设计与实现:Tomcat for K8S
AnsibleDeploy中附带了K8S环境Java应用、Tomcat,裸机环境Tomcat、Java、Command应用的流程样例。
本章将讲解Tomcat for Kubernetes类型的应用流程设计与实现。
自定义变量
首先需要定义一些变量,用于填写与应用项目相关的配置,这些定义的变量AnsibleDeploy将会在执行操作时写到vars.sh文件中,可以在脚本里用$VAR_NAME的格式进行引用。
1、应用变量定义
2、版本变量定义
操作1:构建、发布并部署
1、操作入口:play.sh
1)流程
2) 脚本实现
#!/bin/bash
PRG="$0"
PRGDIR=`dirname "$PRG"`
cd $PRGDIR
export ANSIBLE_HOME=$HOME/ansible
export MANPATH=$MANPATH:$ANSIBLE_HOME/docs/man
export PYTHONPATH=$PYTHONPATH:$ANSIBLE_HOME/lib
export PATH=$PATH:$ANSIBLE_HOME/bin
export LANG=en_US.UTF-8
# AnsibleDeploy系统中为项目、版本、操作等定义的变量保存在vars.sh中
if [ -r "$PRGDIR/vars.sh" ]; then
. "$PRGDIR/vars.sh"
fi
# 因为AnsibleDeploy本身启动时有一个JAVA_OPTS环境变量,
# 其中开启了JMX端口,所以此处需要定义一个新的变量覆盖它,
# 以免执行groovy脚本时因端口重复无法启动
export JAVA_OPTS=
set -o errexit \
&& ansible-playbook -i hosts build-operation.yml \
&& kube-api $cluster_name followJobLog publish-$apptag-$version "BUILD SUCCESSFUL in \d+"\
&& ansible-playbook -i hosts deploy-operation.yml \
&& groovy delete-image.groovy
2、build-operation.yml
这是一个Ansible脚本,负责生成K8S构建脚本并执行