使用阿里云的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@:test/test.git" #项目git地址gitBranch="admin" #要拉取的git分支projectEnv="production" #环境标识dockerTestRegistry="-/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 ];thenmkdir $folderficd $folder || (echo "fail to create folder: $path/$folder" && exit 1)echo '======== start to fetch git'if [ ! -d git ];thengit clone -b $gitBranch $gitUrl git ficd git || (echo 'fail to create git folder' && exit 1)git checkout -f $gitBranchgit pullecho '======== start to prepare docker file'cd ..echo '======== start to copy www files'if [ ! -d www];thenmkdir wwwelserm -rf .www/*ficp -r ./git/www/* ./wwwecho '======== copy src files success'echo '======== start to copy config files'cp -r ./config/* ./www/common/configecho '======== copy config files success'echo '======== start to write build time file'rm -rf $buildVersionFiletouch $buildVersionFileecho `date +"%Y-%m-%d %H:%M:%S"`>>$buildVersionFilecat $buildVersionFileecho '======== 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.ddocker build -t $dockerAdminRegistry -f ./Dockerfile ../ --build-arg BUILD_ENV=$BUILD_ENVdocker push $dockerAdminRegistryecho '======== build admin success'echo '======== all finished!'exit 0
总结:项目发布的所有的步骤都在sh内写好,Jenkins的作用只是执行此sh文件。