1.rancher环境下jenkins安装
1.1 jenkins镜像:jenkins/jenkins:latest,下载最新镜像安装
1.2 jenkins端口映射
1.3 jenkins目录挂载
1.4 因为挂载目录最好不要变化,所以启动pod的节点最好固定
1.5 因为运行docker环境需要管理员权限所以指定用户为0即可,当然前提是你的node节点上已经安装了docker环境
1.6 启动后访问jenkins
2. jenkins初始化及插件安装
2.1 初始化密码可以在jenkins首次启动的日志中查看,添加初始化管理员账号后进入初始化jenkins插件安装界面,耐心等待哦局完成,如果安装超时失败可以替换成国内镜像
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
位置在这里,就是前面rancher中挂载出来的node节点目录下,url替换成国内清华的镜像地址
2.2 附加插件安装
- CloudBees Docker Build and Publish:docker打包镜像并推送镜像仓库
- Docker Pipeline:构建docker流水线
- Git Parameter:参数化构建插件
- Gitlab:gitlab触发自动构建插件(其他托管仓库自行替换)
- maven:打包
- version number:自定义镜像版本号
- redeploy-rancher2-workload:触发镜像自动部署rancher
注意:rancher插件安装github的:插件库的乱码有问题GitHub - jenkinsci/redeploy-rancher2-workload-plugin: A Jenkins plugin to redeploy Rancher2.x workload
其他按照自己使用在添加,不是固定的
2.3 必要的全局权限要先添加,也可以在构建时碰到时在添加
从上往下依次:gitlab账号密码、rancher授权配置、rancher2.x部署配置、gitlab触发token设置
gitlab账号密码没有可说的,就是下载代码的托管仓库的账号密码
rancher2.x权限配置:
对应上图生成的值填上
gitlab触发token设置:gitlab右上角的个人设置里面(Access Token)创建一个个人token
rancher2.x部署配置在下面介绍
3. 打包项目上传镜像仓库自动部署到rancher中(终)
3.1项目创建
3.2 配置(注意标号位置,挨个解释)
- 上面添加的gitlab的token授权
- 使用Git Parameter插件后出现的参数选择,${XXX}可以引用该值,这里指定打包分支
- 指定打包分支
- 添加rancher2.x插件后出现此构建触发,意思是当设定的分支(构建触发项的高级选项里面有设置,不设置默认所有分支)有代码提交时自动触发jenkins打包操作,添加gitlab的webhooks钩子设置,在url前面添加(账号:token)不然提交会报错,token获取方式如下
- version number插件添加后的构建环境,可以自定义构建的版本号,此处格式为:分支.月.日.当天构建成功序号
- 使用maven进行打包,注意maven打包命令即可(下面有详细扩展),如果是微服务类项目单独子模块打包的话maven 命令需要使用 -pl 子模块名 -am 命令指定模块和模块依赖,docker build注意指定dockerfile文件的路径 ./子模块名
- 此处没有使用CloudBees Docker Build and Publish插件打包上传镜像(当然也可以使用), 本项目使用了原始shell脚本的方式调用docker命令打包并上传harbor,注意如果是子模块打包需要指定子模块的DockerFile文件路径,“.”代表系统根目录
- rancher2.x插件的自动部署rancher功能,添加构建后步骤,秘钥为前面添加rancher部署授权,工作负载API地址获取跳转的页面浏览器地址v3后面的部分就是了,镜像就是上面推送的镜像:版本号
3.3 至此所有配置完成,检验一下成果吧!
我配置的分支是dev_security_xxx分支 ,代码提交成功后触发了jenkins自动打包,打包版本号按照设置的版本号规则生成,只有当构建成功后最后的序号会自动加一。
从日志中能看到镜像已经上传到harbor上了,并且rancher的工作负载已经从原镜像更新到了新的镜像上,至此成功!
4.maven设置(题外)
4.1 jenkins打包需要使用jdk和maven的全局设置,jenkins官网已经发公告了,未来jenkins最低支持jdk版本为11...,大写的懵逼
4.2 maven安装选3.8.4,高版本的冲突不要选
4.3 maven配置文件设置,安装Config File Provider插件后会出现Managed Files,添加一个maven配置文件,如下
主要修改内容如下:
支持pom中定义的maven打包命令
<pluginGroups>
<pluginGroup>com.spotify</pluginGroup>
</pluginGroups>
添加harbor仓库配置,仓库是harbor的话id为仓库地址,其他仓库可以自定义(dockerfile:push用)
<servers>
<server>
<id>harbor-xxxxxx</id>
<username>xxxxxx</username>
<password>xxxxxx</password>
<configuration>
<email>[email protected]</email>
</configuration>
</server>
</servers>
添加私有化maven仓库地址,能够下载模块项目依赖
<mirrors>
<mirror>
<id>maven-public</id>
<mirrorOf>*</mirrorOf>
<url>http://nexus.xxxxx.cn/repository/maven-public</url>
</mirror>
</mirrors>
然后再构建中使用该配置文件
4.4 打包方式举例
使用maven的打包方式:pom中<plugins>模块下添加这个就可以了,打包命令mvn clean package
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
镜像构建:需要创建DockerFile文件,默认放在模块根目录下,内容可以查询度娘
使用docker的方式打包:pom中添加
使用dockerfile的打包方式:pom中添加如下:mvn clean package dockerfile:build dockerfile:push
<!--docker打包插件,需要docker环境的支持。-->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.13</version>
<executions>
<execution>
<id>harbor</id>
<goals>
<goal>build</goal>
<goal>push</goal>
</goals>
</execution>
</executions>
<configuration>
<repository>harbor-xxxxxx.cn/xxxxxxx/${docker.image}</repository>
<tag>${docker.version}</tag>
<useMavenSettingsForAuth>true</useMavenSettingsForAuth>
<buildArgs>
<JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>