上一章我们已经搭建好了jenkins环境,我们今天就开始做一下持续集成(CI)操作( •̀ ω •́ )✧
//自己去看上一章吧
https://blog.csdn.net/qq_42883074/article/details/125884893
我们平时写程序用idea软件的情况比较多,这里以idea做演示
注意:
下面演示使用的gif图形式,如果错过某个步骤, 点开图片后 会从头开始播放
我这里项目名称叫mytest,为了方便后续所有的项目都叫这个名称
以上操作我们相当于执行了以下命令,只不过我们是以图像的形式操作
git init
git add
git commit
git push
推荐idea用2021版本的,我用另一台电脑测试最新版本idea 创建maven那块好像不太正常
完成以上步骤后,查看gitlab仓库 master分支,如果有目录和pod.xml就可以了
通常对外提供服务的时候都是暴露一个端口,比如nginx、tomcat
我们这里演示的也是这样,不懂java从网上摘了一段 ( •̀ ω •́ )y 有bug正好测试
vi Handler.java
import java.io.*;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
public class Handler extends Thread{
protected Socket socket;
public Handler(Socket socket) {
this.socket=socket;
}
@Override
public void run() {
try(InputStream input=this.socket.getInputStream()){
try(OutputStream output=this.socket.getOutputStream()) {
handle(input,output);
} catch (Exception e) {
// TODO: handle exception
}
} catch (Exception e) {
try {
this.socket.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
private void handle(InputStream input, OutputStream output) throws IOException {
// TODO Auto-generated method stub
BufferedReader reader=new BufferedReader(new InputStreamReader(input, StandardCharsets.UTF_8)) ;
BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(output,StandardCharsets.UTF_8));
// 读取http请求
boolean requestOk=false;
String first=reader.readLine();
if (first.startsWith("GET / HTTP/")) {
requestOk=true;
}
for(;;){
String header=reader.readLine();
// 读取头部信息为空时,HTTP Header读取完毕
if (header.isEmpty()) {
break;
}
System.out.println(header);
}
System.out.println(requestOk ? "Response OK" : "Response Error");
// 请求失败
if (!requestOk) {
// 发送错误响应:
writer.write("HTTP/1.0 404 Not Found\r\n");
writer.write("Content-Length: 0\r\n");
writer.write("\r\n");
writer.flush();
}else {
// 请求成功
// 发送成功响应:
String data = "Hello Jenkins!
";
int length = data.getBytes(StandardCharsets.UTF_8).length;
writer.write("HTTP/1.1 200 OK\r\n");
writer.write("Connection: close\r\n");
writer.write("Content-Type: text/html\r\n");
writer.write("Content-Length: " + length + "\r\n");
writer.write("\r\n"); // 空行标识Header和Body的分隔
writer.write(data);
writer.flush();
}
}
}
vi HttpServer.java
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
//摘录
//https://blog.csdn.net/weixin_42753193/article/details/122461684
public class HttpServer {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket=new ServerSocket(9999);
System.out.println("server is running...");
for(;;){
Socket socket=serverSocket.accept();// 监听
System.out.println("connected from " + socket.getRemoteSocketAddress());
Thread t = new Handler(socket);
t.start();
}
}
}
运行测试
如上大致就是暴露个端口,提供一个页面的访问,代码不重要我们先推送上去
推送代码到仓库
//地址
http://101.43.4.210:30004/
//登陆用户
root
123456
项目名称 mytest
项目类型 自由风格
说明
我们这里仓库是公开的,不需要认证就能拉取,如果是私有仓库需要点击添加认证,如下
我们在构建完成后可以在控制台查看日志,我们能够看到jenkins已经成功拉取项目
//登陆jenkins容器
kubectl -n devops exec -it jenkins-6fc7d7b75d-lmhgk -- bash
//切换目录
cd /var/jenkins_home/workspace/
//上面的路径/var/jenkins_home/workspace/ 是Jenkins所以项目的存放目录
//在这个目录下我们能查看到拉取到的mytest 项目代码
我们上面只是把代码拉过来了,为了使程序能够运行起来我们需要做下编译打包
1、maven配置: 选择我们之前全局定义的maven即可
2、执行的命令: clean package -DskipTests //这里的命令代表打包不测试
初次跑maven需要下载很多东西,稍微等等吧,跑完后查看控制台日志
//构建成功后,打好的jar报默认是放在/var/jenkins_home/workspace/mytest/ 目录下的
//登陆jenkins容器
cd /var/jenkins_home/workspace/mytest/target
测试jar是否可用
//命令
java -jar mytest-1.0-SNAPSHOT.jar
返回
no main manifest attribute, in mytest-1.0-SNAPSHOT.jar
//报错了,说是没有找到主类,大致意思是说不知道入口函数,下面有解决方法
在idea上编辑pom.xml文件 指定打包的名称和运行程序的入口函数
vi pom.xml
4.0.0
com.bigdata.data.service.center.common
data-service-response
0.1.0
data-service-response
通用组件
org.slf4j
slf4j-api
1.8.0-beta4
mytest
org.springframework.boot
spring-boot-maven-plugin
repackage
true
HttpServer
主要添加的字段
mytest //指定打包的名称
true
HttpServer //指定服务启动的类,就是我们在idea上启动的那个程序
//跑起来提供服务的那个入口函数
直接去jenkins的mytest项目下点下构建就行,会自动去仓库拉取最新的代码去编译打包
//需要在jenkins容器中运行
//当然如果你宿主机也装jdk环境了也可以通过挂载设备里面的包去跑
java -jar mytest.jar
//上面运行的服务端占用了终端
//这里可用再开一个终端,或者后台运行服务端
curl 127.0.0.1:9999
到这里我们就实现了简单的jenkins持续集成,自动化了拉取代码做编译打包的过程后续我们通过Jenkins将我们的jar包发送到服务器上运行( •̀ ω •́ )✧