使用阿里云的k8s,更新一个项目需要如下步骤:

1.先更新代码

2.再将代码打包生成一个docker镜像,推送到阿里云镜像仓库(私有的)

3.在阿里云上使用新的镜像新启一个docker,并把老的docker删除(阿里云k8s可以配置钩子,镜像更新自动重启docker)

使用jenkins构建,就方便很多了。(先要阿里云k8s镜像更新自动重启docker配置好)

在此只使用jenkins运行一个sh文件。

只需要在jenkins配置下执行命令即可:

 sh文件就按照项目发布步骤来写(按照自己项目内的构建逻辑来写,

此处的代码结构:admin项目内有如下几个文件夹

docker [主要用到里面的Dockerfile配置文件]

conf.d [内部存放nginx配置文件]

config [项目配置文件,代码仓库内忽略了配置文件]

git [git内的文件是从代码仓库拉取下来的最新的代码]

www [项目代码]

】具体逻辑不在此赘述):

示例代码:

path="/var/www/"  #项目路径
folder="admin" #项目文件夹名
gitUrl="git@git.com:test/test.git" #项目git地址
gitBranch="admin" #要拉取的git分支
projectEnv="production" #环境标识
dockerTestRegistry="registry.cn-shanghai.aliyuncs.com/test/test:prod" #阿里云镜像仓库地址
BUILD_ENV="production"
buildVersionFile="test/build-version.html" #构建版本时间记录

echo "======== start to publish $folder:$projectEnv (branch:$gitBranch)"
cd $path || (echo "no such dictionary: $path" && exit 1)

if [ ! -d $folder ];then
  mkdir $folder
fi
cd $folder || (echo "fail to create folder: $path/$folder" && exit 1)

echo '======== start to fetch git'

if [ ! -d git ];then
  git clone -b $gitBranch $gitUrl git  
fi

cd git || (echo 'fail to create git folder' && exit 1)
git checkout -f $gitBranch
git pull

echo '======== start to prepare docker file'
cd ..

echo '======== start to copy www files'
if [ ! -d www];then
  mkdir www
else
  rm -rf .www/*
fi

cp -r ./git/www/* ./www
echo '======== copy src files success'

echo '======== start to copy config files'
cp -r ./config/* ./www/common/config
echo '======== copy config files success'

echo '======== start to write build time file'
rm -rf $buildVersionFile
touch $buildVersionFile
echo `date +"%Y-%m-%d %H:%M:%S"`>>$buildVersionFile
cat $buildVersionFile
echo '======== write build time file success'

echo '======== prepare docker file finished'

echo '======== start to run docker file'
cd docker || (echo "no docker dictionary!" && exit 1)

echo '======== start to build admin'
rm -rf conf.d/*
cp -r ../conf.d/* conf.d

docker build -t $dockerAdminRegistry -f ./Dockerfile ../ --build-arg BUILD_ENV=$BUILD_ENV
docker push $dockerAdminRegistry

echo '======== build admin success'

echo '======== all finished!'
exit 0

总结:项目发布的所有的步骤都在sh内写好,Jenkins的作用只是执行此sh文件。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐