GitLab CI构建SpringBoot-2.3应用( 三 )


GitLab CI构建SpringBoot-2.3应用

文章插图
 
  • 再看make_image执行情况 , 如下图:

GitLab CI构建SpringBoot-2.3应用

文章插图
 
  • 镜像制作成功后 , 开始推送到harbor:

GitLab CI构建SpringBoot-2.3应用

文章插图
 
  • 最终完成推送 , 并且清理残留文件:

GitLab CI构建SpringBoot-2.3应用

文章插图
 
  • 最后看看pipeline的整体情况 , 如下图:

GitLab CI构建SpringBoot-2.3应用

文章插图
 
  • 从上图可知commit id是02307851 , 因此Harbor中应该有tag等于02307851的镜像 , 登录Harbor查看 , 如下图红框:

GitLab CI构建SpringBoot-2.3应用

文章插图
 
在K8S环境验证接下来要在K8S环境验证之前的镜像可以正常运行:
  • SSH登录K8S环境 , 执行以下命令 , 用最新的镜像创建deployment:
kubectl create deployment dockerlayerdemo --image=192.168.50.43:5888/common/gitlabci-java-demo:02307851
  • 执行以下命令创建NodePort类型的service:
kubectl create service nodeport dockerlayerdemo --tcp 8080:8080
  • 执行kubectl get svc查服务 , 如下图红框 , 可见容器的8080端口被映射到宿主机的31685端口:

GitLab CI构建SpringBoot-2.3应用

文章插图
 
  • 浏览器访问http://192.168.50.135:31685/hello  , 其中192.168.50.135是K8S宿主机的IP地址 , 如下图 , 可以正常访问SpringBoot服务:

GitLab CI构建SpringBoot-2.3应用

文章插图
 
GitLab CI的价值文章看到这里 , 咱们pipeline脚本也写了 , 镜像有了 , K8S上部署的服务也验证了 , 这就结束了吗?
---还没有 , 咱们来感受一下从修改代码到K8S环境上生效的流程:
  • 修改java代码 , 如下图:

GitLab CI构建SpringBoot-2.3应用

文章插图
 
  • 提交代码:

GitLab CI构建SpringBoot-2.3应用

文章插图
 
  • 顺利生成镜像:

GitLab CI构建SpringBoot-2.3应用

文章插图
 
  • 在K8S环境执行以下命令即可完成镜像更新:
kubectl set image deployment dockerlayerdemo gitlabci-java-demo=192.168.50.43:5888/common/gitlabci-java-demo:8735c78d
  • 上述命令中的gitlabci-java-demo来自kubectl describe deployment dockerlayerdemo结果中 , 显示的容器名称 , 如下图红框:

GitLab CI构建SpringBoot-2.3应用

文章插图
 
  • 系统提示更新成功:

GitLab CI构建SpringBoot-2.3应用

文章插图
 
  • 再次用浏览器访问相同的地址 , 如下图红框 , 修改的代码已经生效:

GitLab CI构建SpringBoot-2.3应用

文章插图
 
可见借助GitLab CI , 编码到部署之间的过程已被简化 , 可以更加专注的撸码了;
体验CD?除了持续集成(CI) , 还可以把持续部署(CD)也加入到pipeline脚本中 , 这样我们只需提交代码 , 对应的镜像会被自动部署到K8S环境;
打开.gitlab-ci.yml , 增加一个stage定义deploy , 如下所示 , 现在一共有三个stage了:
stages:- package- build- deploy
  • 再在尾部增加一个job , 如下所示 , 镜像名为ictu/sshpass:latest , 该镜像内置了sshpass , 可以ssh连接到K8S环境 , 执行kubectl set image XXX命令更新镜像 , 注意包裹kubectl set image命令的是双引号 , 这个很重要 , 只有用双引号时里面的$TAG才会被替换成对应的值:
# 生产镜像的jobdeploy_k8s:# 禁用cache , 避免上传、下载、压缩、解压缩带来的开销cache: {}image: ictu/sshpass:lateststage: deploytags:- k8sscript:- export TAG=$CI_COMMIT_SHORT_SHA- echo "TAG is "$TAG- sshpass -p 888888 ssh -o "StrictHostKeyChecking no" root@192.168.50.135 "kubectl set image deployment dockerlayerdemo gitlabci-java-demo=192.168.50.43:5888/common/gitlabci-java-demo:$TAG"


推荐阅读