k8s的应用部署是一个不断迭代不断循环的过程,故可以使用工具将其自动化。
CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法。 CI/CD 的核心概念是持续集成、持续交付和持续部署。
其中常见的工具有
gitlab:Git仓库管理工具
maven:构建和管理各种项目
Jenkins:基于Java开发的一种持续集成工具
scripts:基于各种脚本语言开发的自动化脚本
常规的项目发布步骤如下:
而有了k8s之后:
具体步骤为
pipline script如下
node {
env.BUILD_DIR = "/root/build-workspace/"
env.MODULE = "web-demo"
stage('Preparation') { // for display purposes
// Get some code from a GitHub repository
git credentialsId: 'e379aaee-d144-42b5-8d82-7d25382269b5', url: 'https://gitee.com/PanDaWangLuoKeJi_hugo_xu/mooc-demo.git'
// Get the Maven tool.
// ** NOTE: This 'M3' Maven tool must be configured
// ** in the global configuration.
}
stage('Maven Build') {
sh "mvn -pl ${MODULE} -am clean package"
}
stage('Build image') {
sh "/root/script/build-image-web.sh"
}
stage('Deploy') {
sh "/root/script/deploy.sh"
}
}
创建构建脚本/root/script/build-image-web.sh
!/bin/bash
if [ "${BUILD_DIR}" == "" ];then
echo "env 'BUILD_DIR' is not set"
exit 1
fi
DOCKER_DIR=${BUILD_DIR}/${JOB_NAME}
if [ ! -d ${DOCKER_DIR} ];then
mkdir -p ${DOCKER_DIR}
fi
echo "docker workspace: ${DOCKER_DIR}"
JENKINS_DIR=${WORKSPACE}/${MODULE}
echo "jenkins workspace: ${JENKINS_DIR}"
if [ ! -f ${JENKINS_DIR}/target/*.war ];then
echo "target war file not found ${JENKINS_DIR}/target/*.war"
exit 1
fi
cd ${DOCKER_DIR}
echo BUILD_DIR: ${BUILD_DIR} DOCKER_DIR: ${DOCKER_DIR} JENKINS_DIR: ${JENKINS_DIR}
rm -rf *
unzip -oq ${JENKINS_DIR}/target/*.war -d ./ROOT
mv ${JENKINS_DIR}/Dockerfile .
if [ -d ${JENKINS_DIR}/dockerfiles ];then
mv ${JENKINS_DIR}/dockerfiles .
fi
VERSION=$(date +%Y%m%d%H%M%S)
IMAGE_NAME=harbor.pdabc.com/kubernetes/${JOB_NAME}:${VERSION}
echo "${IMAGE_NAME}" > ${WORKSPACE}/IMAGE
echo "docker build -t $IMAGE_NAME "
docker build -t $IMAGE_NAME .
echo "docker push ${IMAGE_NAME}"
docker push ${I
增加执行权限
chmod +x /root/script/build-image-web.sh
具体实践
参考
https://blog.csdn.net/xujiami...
and
学习
https://www.bilibili.com/vide...
深入学习:https://zhuanlan.zhihu.com/p/...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。