部署
所有服务均以docker或者kubernetes运行。
$ docker run -d --name jenkins-server -p 8005:8080 -v /usr/local/wlhiot/mount/jenkins:/var/jenkins_home 192.168.254.29:8001/library/jenkins:2.289.3
在宿主机创建1000权限的目录并挂载,正常运行后浏览器输入127.0.0.1:8005访问Jenkins服务。
查看宿主机的/usr/local/wlhiot/mount/jenkins/secrets/initialAdminPassword目录获取登录密码。
Jenkins原生的权限管理还是比较弱的,可以使用'Role-based Authorization Strategy'(限制各岗位能查看的Job,适合小公司)插件或者'OpenLDAP'(用户统一管理,适合人员流动较大的公司)来实现权限把控。
集成
与gitlab代码管理集成
gitlab的搭建及使用见'devops'父目录下的'gitlab'子目录 参考链接:CI持续集成系统环境
与gerrit代码审查集成
gerrit的搭建及使用见'devops'父目录下的'gerrit'子目录 参考链接:CI持续集成系统环境
与sonarqube代码质量管理集成
http://www.dhr2333.cn/article/2022/5/16/26.html
与dingtalk(钉钉)集成
http://www.dhr2333.cn/article/2022/5/16/24.html
与OpenLDAP集成实现权限管理
http://www.dhr2333.cn/article/2022/6/27/36.html
CI流程说明
得到Jar包前的步骤均属于CI阶段,主要包含:
- 开发完成需求提交代码至gerrit参与review,通过后同步至gitlab
- Jenkins从gitlab拉取代码至workspace
- maven对其进行编译得到工程件(jar包或者dist目录)
- 通过Junit进行自动化测试
- 配合sonarqube进行质量检测
CD流程说明
CD主要是部署,主要的工作是得到能跑起项目的Jar包后,将其打成镜像并部署
- 编写dockerfile(可以由开发写进代码中也可保存在服务器中)
- 将jar包打成docker镜像(可附加参数使其每次构建都生成指定版本的镜像)
- 将镜像推送到harbor仓库进行存档
- 控制服务器拉取镜像进行部署
CI/CD完整流程整合
整个流程以'自由风格的软件项目'来实现,因为'freestyle'是大部分Job的基础。 不仅能实现Maven项目,也能实现vue项目,且Jenkins官方推荐的最佳实践Pipeline流水线也得先用'freestyle'实现,然后再逐步修改。
-
拉取gitlab中指定分支的代码(可通过/usr/local/wlhiot/mount/jenkins/workspace/查看拉取的代码)
-
对拉取的代码进行maven编译打包
-
生成docker镜像,上传仓库,通过kubernetes API控制node节点拉取镜像进行部署
-
查看运行结果,YAML文件模板见http://www.dhr2333.cn/article/2022/5/16/27.html
-
通过sonarqube对代码进行质量检测
-
构建成功后触发钉钉通知或邮件通知
将Jar打包成docker镜像的dockerfile文件(根据实际需求)
java项目是跑在JVM虚拟机上的,即使已经修改了容器的时区也得需要添加启动参数'-Duser.timezone=GMT+08'用来修改JVM虚拟机的时间
$ cat /usr/local/wlhiot/container/docker/project/ebox/svr/
dockerfile wlh-electric-0.0.1-SNAPSHOT.jar
$ cat /usr/local/wlhiot/container/docker/project/ebox/svr/dockerfile
FROM java:8
MAINTAINER bingo
ADD wlh-electric-0.0.1-SNAPSHOT.jar ebox.jar
EXPOSE 8081
ENTRYPOINT ["java","-jar","-Duser.timezone=GMT+08","ebox.jar"]