10、自由风格的CI操作(中间架构)
中间架构图
创建web项目
创建一个 web 项目,就使用简单的 spring boot
工程,例如工程名为 hellojks
。仅需导 入 spring web
依赖即可。
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String helloHandle(){
return "Hello Jenkins!!!!";
}
}
启动测试,访问成功
Idea提交项目到远程仓库
在gitlab中创建一个远程仓库,用于管理之前创建的web工程
Idea创建本地库
仿照远程仓库页面中的 Git global stetup 中的命令,在项目的 Terminal 窗口
中创建一个全局用户。
提交代码到本地库
在项目上右击,选择 Git -> Commit Directory
。
此时会弹出一个 Commit to master
的窗口。在其中选择要提交的文件,并在文本区填写提交日志。然后 Commit
。
然后会看到警告,不影响提交,直接再 Commit Anyway
即可。
提交代码到远程库
首先要从远程仓库中获取仓库地址。选择复制 Clone with HTTP
的地址。
然后在项目上右键,选择 Git -> Push
。
在新窗口中点击 Define remote
,在弹出的窗口中粘贴进复制来的远程仓库地址。
Push 后会弹出访问 GitLab
的登录窗口
输入用户名 root
,密码为前面GitLab修改过的密码
推送成功后,在 idea 右下角即可看到成功提示。
此时刷新 GitLab 页面,即可看到推送来的项目。
从jenkins拉取代码
新建任务
jenkins集成gitlab
对于 public 的 GitLab 仓库,直接指定仓库地址,应用保存即可
。但对于 private 仓库,则需要指定访问 GitLab 的用户名与密码
。点击添加按钮,即可打开下面的窗口。
在其中填写用户名与密码
后“添加”即可返回之前的页面,此时在 Credentials
下拉框中 即可找到新添加的用户信息,选择即可。
立即构建
查看控制台输出
上面是第二次构建,在第一次构建时,Jenkins执行 git init /var/jenkins_home/workspace/my_hellojks 命令
可以看出,Jenkins 将其容器内的/var/jenkins_home/workspace/my_hellojks 目录
作为项目的本地仓库,也就是数据卷目录。进入 jenkins 数据卷可以看到该项目已经存在了。
将项目打为jar包
在 Jenkins 能够通过配置,调用本地的 maven 的 mvn 命令
,将拉取来的项目打为 Jar 包。
Jenkins 配置 mvn 命令
点击配置后,打开配置页面。然后点击 Build Steps
,跳转到以下位置。
调用顶层 Maven 目标,使用前面配置的 Maven 来完成打包任务。
“clean package -DskipTests” 是一个 Maven 命令,用于构建 Java 项目并跳过运行测试。
重新构建
构建成功
构建成功后进入 jenkins 数据卷目录/var/jenkins_home/workspace/my_hellojks
中可以看 到新增了 target 目录("target" 目录是 Maven 构建工具生成的默认目录,用于存放构建过程中生成的各种输出文件。
)。打开 target 目录,可以看到打出的 jar 包。
代码质量检测
在 Jenkins 的 my_hellojks 项目中应用 SonarScanner
对其代码进行质量检测。所以 需要在该项目中配置 SonarScanner
。
再次执行立即构建
,构建成功后,刷新 SonarQube 页面,便可看到新增了一个项目。
构建成功,查看页面
jenkins将代码推送到目标服务器
在返回的任务首页中,再次执行立即构建。查看日志可以看到连接目标服务器,推送 1 个文件的日志。
目标服务器查看,可以看到 jar 包已经推送了过来。
构建镜像启动容器
通过在 Jenkins 中配置在目标服务器中将要执行的相关命令,使得 Jenkins 将 jar 包推送 到目标服务器后,立即自动执行配置的命令,将 jar 包构建为一个镜像,并启动其相应的容 器,使项目启动运行。
定义 Dockerfile
若要构建镜像,就需要定义其 Dockerfile
。现在 Idea 的工程中新建一个 Directory
,例如 docker
,然后在其中新建一个 Dockerfile
。
idea终端执行mvn clean package
, 是一个 Maven 命令,用于清理项目并执行构建操作。
Dockerfile文件内容
FROM openjdk:8u102
LABEL auth="shengxia" email="shengxia@163.com"
COPY hellojenkins-0.0.1-SNAPSHOT.jar /jenkins/hellojenkins.jar # 复制到目标服务器所在的目录
WORKDIR /jenkins
ENTRYPOINT ["java", "-jar", "hellojenkins.jar"]
定义 compose.yml
在 idea 的新建目录中再新建一个 compose.yml
,用于构建镜像和启动容器。
services:
hellojenkins:
build: ./
image: hellojenkins
container_name: myhellojenkins
ports:
- 8080:8080
推送到 GitLab
再配置构建后操作
重新构建
Jenkins 中在返回的任务首页中,再次执行立即构建。构建成功后,查看目标服务器中的/jenkins
目录,发现 docker 目录及其下的两个 docker 文件已经存在了
,且 jar 包 也复制了进来。
在目标服务器中 docker images,可以看到 hellojenkins 镜像
已经生成。
在目标服务器中 docker ps
,可以看到容器已经启动了。
在浏览器中访问目标服务器中的应用,已经可以访问了。
修改idea中的代码,然后push到gitlab上面,点击构建,就可以实现交付了
修改代码
package com.example.hellojenkins.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String helloHandle(){
return "Hello Jenkins. This is the second modified!!!!";
}
}
立即构建
查看