devops学习(四) Jenkins CI 持续集成

上一章我们已经搭建好了jenkins环境,我们今天就开始做一下持续集成(CI)操作( •̀ ω •́ )✧

 持续集成是什么意思

//自己去看上一章吧
https://blog.csdn.net/qq_42883074/article/details/125884893

 一、开发代码上传仓库

我们平时写程序用idea软件的情况比较多,这里以idea做演示

注意:

       下面演示使用的gif图形式,如果错过某个步骤, 点开图片后  会从头开始播放

1、打开idea 根据图示创建项目

devops学习(四) Jenkins CI 持续集成_第1张图片

我这里项目名称叫mytest,为了方便后续所有的项目都叫这个名称

2、idea 关联gitlab仓库

 以上操作我们相当于执行了以下命令,只不过我们是以图像的形式操作

git init
git add 
git commit
git push 

 推荐idea用2021版本的,我用另一台电脑测试最新版本idea 创建maven那块好像不太正常

完成以上步骤后,查看gitlab仓库 master分支,如果有目录和pod.xml就可以了

3、添加业务代码并上传

通常对外提供服务的时候都是暴露一个端口,比如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();

        }

    }
}

 运行测试

如上大致就是暴露个端口,提供一个页面的访问,代码不重要我们先推送上去

 推送代码到仓库

二、 jenkins拉取仓库代码

//地址
http://101.43.4.210:30004/

//登陆用户
root
123456

 1、新建项目

项目名称  mytest

项目类型  自由风格

devops学习(四) Jenkins CI 持续集成_第2张图片

2、配置项目代码从gitlab拉取

 说明

我们这里仓库是公开的,不需要认证就能拉取,如果是私有仓库需要点击添加认证,如下

3、构建项目

我们在构建完成后可以在控制台查看日志,我们能够看到jenkins已经成功拉取项目

//登陆jenkins容器
kubectl -n devops exec -it jenkins-6fc7d7b75d-lmhgk  -- bash


//切换目录 
cd /var/jenkins_home/workspace/   


//上面的路径/var/jenkins_home/workspace/   是Jenkins所以项目的存放目录
//在这个目录下我们能查看到拉取到的mytest 项目代码

4、添加构建时maven打包操作

我们上面只是把代码拉过来了,为了使程序能够运行起来我们需要做下编译打包

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
//报错了,说是没有找到主类,大致意思是说不知道入口函数,下面有解决方法

5、指定运行主类并修改打包名称

在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上启动的那个程序
                                        //跑起来提供服务的那个入口函数

5.1 构建代码

直接去jenkins的mytest项目下点下构建就行,会自动去仓库拉取最新的代码去编译打包

 devops学习(四) Jenkins CI 持续集成_第3张图片

5.2、编译后测试jar包可用性

//需要在jenkins容器中运行
//当然如果你宿主机也装jdk环境了也可以通过挂载设备里面的包去跑
java -jar mytest.jar

devops学习(四) Jenkins CI 持续集成_第4张图片

//上面运行的服务端占用了终端
//这里可用再开一个终端,或者后台运行服务端
curl 127.0.0.1:9999

devops学习(四) Jenkins CI 持续集成_第5张图片

到这里我们就实现了简单的jenkins持续集成,自动化了拉取代码做编译打包的过程后续我们通过Jenkins将我们的jar包发送到服务器上运行( •̀ ω •́ )✧

你可能感兴趣的:(devops,jenkins,devops,学习)