本文实践了基于k8s、docker、jenkins构建springboot服务 https://blog.csdn.net/qq_38695182/article/details/85237660 因为各种原因,文中docker私有仓库和k8s的安装命令不可用,构建脚本需要修改 环境准备和修改后的脚本请看下文, 最终构建成功springboot的持续集成环境。
docker安装 https://www.w3cschool.cn/docker/centos-docker-install.html docker搭建私有仓库 https://blog.csdn.net/egworkspace/article/details/80518647 k8s环境准备 https://www.jianshu.com/p/78a5afd0c597 jenkins安装 https://blog.csdn.net/hc_ttxs/article/details/79384535 springboot测试项目地址 https://github.com/bones4/docker-demos.git
节点介绍 192.168.199.131 docker私有仓库节点 192.168.199.137 k8s节点 192.168.199.138 jenkins 节点
需要在三个节点上增加域名信息 vi /etc/hosts 192.168.199.131 node.docker.registry 192.168.199.137 node.k8s 192.168.199.138 node.jenkins
补充命令 开机自动启动Docker sudo chkconfig docker on
进入k8s节点
# cd /data/boot # vi tmp.yamltmp.yaml的内容为
apiVersion: apps/v1 kind: Deployment metadata: name: data-lake-deployment spec: selector: matchLabels: app: data-lake #全局标识 replicas: 1 template: metadata: labels: app: data-lake spec: hostAliases: - ip: "10.108.211.000" hostnames: - "tsl.com" containers: - name: data-lake #容器名 image: node.docker.registry:5000/waylau/docker-spring-boot #换成自己的镜像地址 ports: - name: link2 containerPort: 32111 #需要暴露的端口 protocol: TCP --- apiVersion: v1 kind: Service metadata: name: data-lake-service spec: type: NodePort selector: app: data-lake ports: #设置外部访问 - name: link1 port: 8080 #容器内端口 nodePort: 32111 #外部访问端口 相当于docker的-p 32000:80801、任务名称:springboottest
2、任务类型:自由风格
3、创建github访问Credential, Credential类型:username with password,写 你的github帐号密码,
5、创建构建脚本
tag=$( date +'%Y%m%d%H%M' ) echo $tag >version_springcloudtest.txt echo $tag6、创建ssh server 系统管理-〉系统设置菜单-〉publish over ssh 需要创建2个ssh帐号, k8s节点的帐号node.k8s docker私有仓库节点帐号node.docker.registry
7、增加构建步骤-Send files or execute commands over SSH SSH-Server选node.docker.registry Transfer Set:Source files 值为version_springcloudtest.txt Exec command:
version_file=version_springcloudtest.txt tag=$( cat $version_file ) dockerhost=192.168.199.131 cd /opt/docker rm -rf * git clone https://github.com/bones4/docker-demos.git cd /opt/docker/docker-demos/samples/spring-boot mvn clean package cd /opt/docker/docker-demos/samples/spring-boot/src/main/docker cp Dockerfile /opt/docker/docker-demos/samples/spring-boot/target cd /opt/docker/docker-demos/samples/spring-boot/target docker build -t waylau/docker-spring-boot:$tag . docker tag waylau/docker-spring-boot:$tag $dockerhost:5000/waylau/docker-spring-boot:$tag docker push $dockerhost:5000/waylau/docker-spring-boot:$tag8、增加构建步骤-Send files or execute commands over SSH SSH-Server选node.k8s Transfer Set:Source files 值为version_springcloudtest.txt Exec command:
version_file=version_springcloudtest.txt tag=$( cat $version_file ) dockerhost=192.168.199.131 kubectl delete deployment data-lake-deployment kubectl delete svc data-lake-service cd /data/boot/ rm -rf app.yaml cp tmp.yaml app.yaml p_new_version=docker-spring-boot:$tag echo $p_new_version sed -i "s/docker-spring-boot/$p_new_version/" app.yaml sed -i "s/node.docker.registry/$dockerhost/" app.yaml kubectl create -f /data/boot/app.yaml1、在gitlub上修改代码并提交 2、重新执行构建 3、浏览器中查看测试站点,发现已更新到最新版。
如果把相关环境迁移到其他的局域网内 1、装私人仓库, 1、设hosts, 3、设仓库和k8s节点的/etc/docker/daemon.json,增加镜像和https白名单
vi /etc/docker/daemon.json { "registry-mirrors": ["https://registry.docker-cn.com"], "insecure-registries":["192.168.199.131:5000"] }4、检查selinux是否禁用,如果没禁用,报错500,
将selinux禁用 #setenforce 0 #getenforce