1.安装jenkins(略)
2.安装完成后,访问8080,配置一个新的admin用户,然后安装一些需要的插件(我是默认推荐安装的),额外还需要一个Publish over SSH插件,为了之后都调用别的服务器上的命令
3.构建一个freestyle的工程,第一项General要使用参数化构建,设置一个VERSION的变量(后面迭代时使用);然后还要选择丢弃旧的构建,时间和保留个数自己定
4.配置源码管理,选择项目的git地址,然后Credentials选择对应的账号密码(没有也可以当时新建)(遇到问题,github经常访问不了,导致代码没拉下来,不重要,企业肯定都是内部的)。Branches to build指定要处理的分支。
5.后面几项不管,直接到构建,选择执行shell,填写要执行的命令:
mvn install -DskipTests
cd target
mv demo01-0.0.1-SNAPSHOT.jar demo01.jar
echo "当前版本:${VERSION}"
因为jenkins默认目录在/var/lib/jenkins/workspace/github上拉下的项目 下,所以可以直接执行mvn。
6.暂时保存下现有的配置,先回到主面板设置-》系统设置中,找到Publish over SSH模块配置ssh,填写name(服务器的名字随便起),Hostname和Username,再在高级中输入passowrd,然后保存即可。
7.再进入Item的配置,在构建中可以增加构建步骤,选择execute commands over SSH:
执行的命令是将jar包通过dockerfile构建为镜像,其中VSERSION变量为jenkins构建时传入,最后将镜像推送至本地镜像仓库。
8.通过ssh到k8s的master节点通过kubectl命令来更新容器(这一步我感觉可以不在jenkins做,因为这一步操作比较灵活(使用滚动更新,金丝雀什么的),运维在服务器上去执行比较好,对应cicd,推送新的镜像至镜像仓库就算成功)。ssh执行的命令:/var/k8s-yaml/processDemo01.sh ${VERSION}
processDemo01.sh 内容:
# 获取服务对应的运行的容器个数(使用jenkins有点不好,在delete销毁k8s的deployment时,还需要一段时间,下面这个命令会返回不为0的结果,所以不够灵活)
number=`kubectl get pods |grep demo01|wc -l`
if [ $number -gt 0 ];then
echo '重新设置镜像'
kubectl set image deployment deploy-demo01 demo01=192.168.56.100/zzn/demo01:$1 # $1为jenkins构建时传入的version变量
else
echo '新创建deploy'
kubectl apply -f /var/k8s-yaml/demo01.yaml # 这里要写绝对路径,否则jenkins找不到
fi
9.构建即可