前言
我们在日常开发中,经常会有各种各样复杂的发布需求,而且经常会碰到各种环境,比如:开发环境、测试环境、生产环境。虽然可以使用手动构建、上传服务器部署的方式,如果我们有多个项目应用,每个项目应用又包含多个应用组件部署,如果用手动方式就会非常繁琐而且容易出错。使用Jenkins结合SCM可以实现代码的整个自动化构建部署过程,使我们的项目更加符合CICD标准化流程。
本文中自动构建部署过程大致完成了以下步骤:
- 提交spring boot项目代码并打上git tag,上传代码及tag至gitlab
- gitlab通过webhook自动触发jenkins执行任务
- jenkins获取代码,执行代码编译、构建docker镜像、上传docker镜像至harbor镜像仓库、执行kubectl命令部署至k8s。
本文中采用jenkins pipeline执行整个jenkins的构建过程,在pipeline中使用docker执行maven构建。文中构建的docker镜像的tag直接采用git中的tag。
下面的示例中,jenkins版本为2.121.3,gitlab版本为10.0.2-ce,如果使用的版本不一致可能会有部分设置差异。
部署jenkins
这里采用docker的方式部署jenkins。
- 在终端中运行docker命令,使用jenkinsci/blueocean镜像运行容器。
docker run \
-d \
-u root \
-p 8080:8080 \
-v jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
jenkinsci/blueocean
-
访问 http://localhost:8080 地址,等待出现下面解锁界面。
解锁jenkins
-
使用docker logs 命令从日志信息中 复制自动生成的密码(在两组星号之间)。
默认密码
-
在 解锁Jenkins 页面, 粘贴密码并继续。
-
解锁jenkins后,在界面中选择“安装建议的插件”。
-
最后,jenkins要求创建管理员用户。创建新用户或使用admin用户,按照步骤完成后即可登录使用jenkis了。
注:由于后面jenkins pipeline任务会上传docker镜像至harbor仓库,如果harbor使用http需要在/etc/docker/daemon.json中将地址配置到insecure-registries;如果harbor使用自签名https证书,需要将ca证书放入/etc/docker/certs.d/目录下。设置完需要重启docker服务。
准备java示例工程
下面新建spring boot示例工程,示例工程的代码地址为:https://gitee.com/tinylk/pipeline-demo
创建spring boot示例工程
- 通过 https://start.spring.io/ 生成spring boot基础工程,添加一个示例Controller类。
package com.example.demo.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HomeController {
@GetMapping("")
public String hello() {
return "Hello!";
}
}
- 修改application配置文件,设置端口。
spring.application.name=pipeline-demo
server.port=40080
- 编译运行,访问 http://localhost:40080 地址可以看到示例运行结果。
添加Dockerfile
在工程根目录创建Dockerfile,用来构建docker镜像。其中${JAR_FILE}参数在pipeline执行docker build时,通过build-arg参数传入。
FROM openjdk:8-jdk-alpine
#构建参数
ARG JA