A. 手把手搭建jenkins + docker + k8s 持续集成、自动化发布环境
持续集成对于微服务开发来说,已经是不可或缺了,能够极大的提升效率。由于自己在家鼓捣项目的过程中,时常会有一些发布,本着偷懒的目的,在家里搭建了这套环境,记录下过程。
todo
流程控制
说明下: -u root 、 -v /var/run/docker.sock:/var/run/docker.sock 、 -v /usr/local/bin/docker:/usr/bin/docker 都是为了能够调用宿主机的docker执行build镜像
示例的构建用的是一个maven项目
B. docker jenkins 构建 springboot 项目、vue 项目
服务器IP:以192.168.1.1为例
需要修改下目录权限, 因为当映射本地数据卷时,/var/jenkins_mount目录的拥有者为root用户,而容器中jenkins user的uid为1000执行如下命令即可
如果需要nginx代理,在nginx中配置
在浏览器打开页面
http://192.168.1.1:9527/jenkins
输入密码后,出现这个页面
选择安装推荐的插件
Publish Over SSH 远程执行ssh插件
Maven Integration plugin maven插件
NodeJs plugin插件
=
C. 怎么在docker中部署jenkins
使用以下的体系结构组件来部署Jenkins:
Jenkins主服务器(Java进程)
Jenkins master data (插件,任务定义等)
NGINX web代理(使用SSL证书)
构建slave代理(可以通过SSH、JNLP或Jenkins Master连接)
这是一个很好的开端。通过这一系列博客,我们考虑将上述提到的组件容器化,并使用Docker容器来构建从节点(slaves)。对于初学者,我们将在Docker容器中创建Jenkins主服务器,然后转向处理数据持久化,并通过NGINX添加web代理。
整个系列博客将涉及以下几个Docker概念:
创建你自己的Dockerfiles
最小化对于公共镜像的依赖
创建和使用数据卷(Data-Volumes),包括备份
利用容器创建容器化的“构建环境”
使用镜像和Jenkins来处理“机密”数据
如果你还没有看过Cloudbees的Jenkins Docker镜像,就从它开始吧,这是一个相当不错的开端。
D. Jenkins Gitlab 前端构建发布
流程:通常是从gitlab/github拉取项目,构建,把产出文件发到服务器。
一、环境
创建任务之前,要先配置两项:
问题1:jenkins credentials配置SSH
系统管理 -> Manage Credentials -> 全局凭据 (unrestricted) ->添加或者编辑
注意:这里的key是个大坑,最开始我纠结是填私钥还是公钥,发现粘贴进去都不对。(粘贴私钥时我粘贴的是正文,没有复制首尾两行,导致一直报错。)最后把私钥整个粘贴进去就对了。
原因:
由于Jenkins的安全策略配置了CSRF跨站点保护。
解决方案:
进入Jenkins,系统管理-->全局安全配置,勾选匿名用户具有可读权限和去掉CSRF防止跨站点请求伪造:
在 /configure 下
这个插件是jenkins连接linux系统的时候使用。
以下针对插件的每个属性进行说明。
Name
SSH Server的Name属性就是你希望连接的服务器。
Source files
这里输入的是你希望传到服务器的文件夹和文件。路劲是相对jenkins的workspace的项目名称的。例如编译打包后的路径为dist文件夹下的jenkinszip.tar.gz,则Surce files填入dist/jenkinszip.tar.gz。
Remove prefix
如果Source files为dist/jenkinszip.tar.gz,但是不想把dist目录创建到服务器端,这个时候就可以在Remove prefix里填入dist
Remote directory
这里指定文件将被拷贝到服务器的路径。
PS:被拷贝文件在服务器上的完整路径=登录服务器账号的默认路径(就是全局设置的Remote Directory)+当前任务配置的Remote directory。
例如我的服务器路径是 /home/wwwroot/aaa
我全局配置Remote Directory 是 /home/wwwroot
当前任务配置的Remote Directory 是 /aaa/
Exec command
这里就是连接服务器之后需要执行的命令。
注意:这里配置的Secret token和 webhook要填写到gitlab里面,路径如下:
参考文章: https://blog.csdn.net/hou_ge/article/details/103507947
E. jenkins构建项目的错误和原因及其解决方法
我们项目开发完之后需要构建项目发布上线时,通常会使用到jenkins构建工具,然后在使用jenkins工具构建项目时通常也会遇到一些构建错误问题,通常情况下,如果项目在自己本地打包时没有问题,启动服务时也没有问题的情况下,可能是jenkins配置问题,需要开发人员配合本地配置项的修改完成,下面我给大家分享一下我遇到的一些构建失败问题,注意:本篇文章讲的主要是关于前端项目的构建失败问题。
Umi自动化工程创建的react项目
从图一中可以看出,是构建时打包命令出错,使用了不能识别的 npm run build:prod ,该命令是前端工程项目中 package.json 包文件中的 scripts 中配置的,该案例中前端并没有配置build:prod 这个打包命令,如图:
这里有两种解决办法。
直接去jenkins 上将打包命令配置成前端包文件种配置的命令,本案例中因为没有区分不同的开发环境,而且项目也只有master一个主分支,没有使用环境变量来区分不同环境的打包命令,所以图一中的问题,可以直接将jenkins里面的打包命令配置成图二中的打包命令 npm run build。去到jenkins 工具中,找到对应的配置项,如图:
如果项目变得复杂,需要进行严格的环境区分,那么这种情况下建议使用第二种方法,使用环境变量区分不同环境的打包命令,具体步骤如下:
去到前端项目在项目根目录下找到包文件package.json文件,打开后,在scripts下面配置build:prod 的打包命令,如图:
去到前端项目中的配置文件config.js中配置 APP_ENV环境变量来区分不同的环境,例如生产环境,开发环境,测试环境等,配置如下:
本文中暂时讲到图一中这种jenkins构建失败的现象以及导致失败的原因和针对其不同的两种解决方法,后续再碰到其它失败现象再补充,或者大家也可以在评论区回复各自遇到的失败情况,欢迎留言。
F. jenkins构建docker镜像
解锁jenkins
选择安装推荐的插件即可,也可以选择自定义
创建用户
安装maven
安装docker
配置docker
搭建私有仓库
打开 系统管理》系统配置 页面 拉到最下面有个cloud选项
接下来新建一个maven项目 点击 新建任务
添加maven打包完之后的docker镜像构建命令
dockerfile填写自己的路径 默认是pom.xml同级目录 就是项目的根目录吧 是否推送仓库等都是可选的 按需配置
保存后点击 立即构建