当前位置:网站首页>devops学习(四) Jenkins CI 持续集成
devops学习(四) Jenkins CI 持续集成
2022-07-29 23:05:00 【默子昂】
上一章我们已经搭建好了jenkins环境,我们今天就开始做一下持续集成(CI)操作( •̀ ω •́ )*
持续集成是什么意思
//自己去看上一章吧
https://blog.csdn.net/qq_42883074/article/details/125884893一、开发代码上传仓库
我们平时写程序用idea软件的情况比较多,这里以idea做演示
注意:
下面演示使用的gif图形式,如果错过某个步骤, 点开图片后 会从头开始播放
1、打开idea 根据图示创建项目

我这里项目名称叫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 = "<html><body><h1>Hello Jenkins!</h1></body></html>";
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
1234561、新建项目
项目名称 mytest
项目类型 自由风格
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
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.bigdata.data.service.center.common</groupId>
<artifactId>data-service-response</artifactId>
<version>0.1.0</version>
<name>data-service-response</name>
<description>通用组件</description>
<dependencies>
<!--日志打印-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.8.0-beta4</version>
</dependency>
</dependencies>
<build>
<finalName>mytest</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<includeSystemScope>true</includeSystemScope>
<mainClass>HttpServer</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
主要添加的字段
<build>
<finalName>mytest</finalName> //指定打包的名称
<configuration>
<includeSystemScope>true</includeSystemScope>
<mainClass>HttpServer</mainClass> //指定服务启动的类,就是我们在idea上启动的那个程序
//跑起来提供服务的那个入口函数
</configuration>5.1 构建代码
直接去jenkins的mytest项目下点下构建就行,会自动去仓库拉取最新的代码去编译打包

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

//需要在jenkins容器中运行
//当然如果你宿主机也装jdk环境了也可以通过挂载设备里面的包去跑
java -jar mytest.jar
//上面运行的服务端占用了终端
//这里可用再开一个终端,或者后台运行服务端
curl 127.0.0.1:9999
到这里我们就实现了简单的jenkins持续集成,自动化了拉取代码做编译打包的过程后续我们通过Jenkins将我们的jar包发送到服务器上运行( •̀ ω •́ )*
边栏推荐
- 微信小程序滑动导航栏(网页浮动窗口怎么设置)
- JetsonNano学习(五)JetsonNano 安装 PyTorch 及 Torchvision
- C语言初阶-初识C语言
- In 2022, the latest Gansu construction staff (material staff) mock exam questions and answers
- esp12f + tft display picture problem
- WSDM‘22推荐系统论文梳理
- High - level - the rest - the client determine whether indexes exist
- 推荐 7 个学习 Web3 的开源资源
- 资源集合
- 设计消息队列存储消息的MySQL表格
猜你喜欢

【无标题】清空吗

嵌入式系统驱动初级【1】——内核模块上_编译方法

Qt uses QSortFilterProxyModel for sorting and filtering in QML

超分之RVRT

我们上线了一个「开发者实验室」

Huawei 14 Days - (3) Kernel Development

Three chess (written in C language)

一个print函数,挺会玩啊?

MySQL Interview Questions: Detailed Explanation of User Amount Recharge Interview Questions

VsCode更新后,怎么使用使用快捷键同时生成多个元素
随机推荐
子无序测试
新版微信小程序发布指南
真offer收割机 第一弹~大厂如何考察候选人?(附答案详解)
The sequence table of the linear table (the dry goods are full of sharing ~ contains all the function codes of the sequence table~
BGP联邦综合实验
地狱挖掘者系列#1
A print function, very good at playing?
Design for failure常见的12种设计思想
2022年最新甘肃建筑施工焊工(建筑特种作业)模拟题库及答案解析
【leetcode】50. Pow(x, n)(中等)(快速幂)
运动步数抽奖小程序开发
Codeforces Round #245 (Div. 1) A (dfs)
JetsonNano learning (6) Big pits and solutions that Jetson stepped on___Continuously updated
MySQL数据库进阶篇
三子棋(用C语言写)
高数下|三重积分习题课|高数叔|手写笔记
DNA修饰碳纳米管|DNA修饰单层二硫化钼|DNA修饰二硫化钨(注意事项)
Qt之在QML中使用QSortFilterProxyModel进行排序和过滤
Another new rule for credit cards is coming!Juphoon uses technology to boost the financial industry to improve service quality and efficiency
【面试:并发篇29:多线程:volatile】原理