DevOps-Jenkins-CI持续集成操作

创建项目

创建个web项目

我这里直接用Spring Web自动生成的demos

启动项目,访问展示如下默认页面信息

项目新增Docker构建配置

在项目下新建docker目录,新增Dockerfile、docker-compose.yml文件

Dockerfile文件,将mytest.jar 复制到容器的/usr/local/目录下,在/usr/local执行命令java -jar mytest.jar

复制代码
FROM daocloud.io/library/java:8u40-jdk
COPY mytest.jar /usr/local/
WORKDIR /usr/local
CMD java -jar mytest.jar

docker-compose.yml文件,当前目录以Dockerfile构建镜像,镜像叫mytest,版本v1.0,容器名字mytest,端口7777

复制代码
version: '3.1'
services:
  mytest:
    build:
      context: ./
      dockerfile: Dockerfile
    image: mytest:v1.0
    container_name: mytest
    ports:
      - 7777:8080

修改pom.xml文件

build下添加配置,让jar包以mytest为名(mytest.jar,Docker构建里也是设置的复制名为这个jar包)

复制代码
<finalName>mytest</finalName>

注意:如果跟我一样用默认生成的web还需修改主类配置,将主类配置修改如下。不然在本地正常运行,打成jar包后默认配置会跳过然后报错:no main manifest attribute, in mytest.jar

复制代码
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <mainClass>com.monster.mytest.MytestApplication</mainClass>
                        </manifest>
                    </archive>
                </configuration>

上传代码

将代码上传至Gitlab

现在Gitlab还未做任何动作,先去Gitlab(192.168.170.111:8888)新建项目

这里测试我直接设置的公开的,不想多一步密码的操作

在IDEA添加Git远程

推送到远程仓库

第一次推送会提示要令牌

那我们就去Gitlab生成个令牌,来到用户设置里面 > Access Tokens

Token名称随意,必须授权api、read_user这两个范围,点击创建即可

点击创建按钮后,不要刷新或关闭页面,立马滑到最上面可以看见生成的token

只展示一次,刷新或关闭页面就得重新生成。

将token复制到IDEA提示的令牌款里既可以推送到Gitlab仓库了。


Jenkins配置

添加远程服务器

首先来到Jenkins配置 > 系统管理 > 系统配置,滑动到最下面添加SSH远程服务器,这里就是Publish Over SSH插件起到的重要。

将你需要把项目部署到哪台服务器,就添加哪台服务器的链接信息,例如这里我把项目部署到服务器192.168.170.111上(注意:部署的远程服务器需要安装好Docker)

设置好信息可以点击右下角的test configuration 测试一下连通性,是否能正常连接。

密码得点击左下角的"高级"按钮设置,支持使用密钥对的方式远程连接。

Jenkins任务创建

新建个任务,构建一个自由风格的软件项目

源码管理处设置你的git仓库地址,我这里设置的公开仓库拉去代码的时候无需账号密码,私有的点击高级按钮上面的"添加"按钮添加账号或密钥

需要注意你的Gitlab仓库的主分支是什么,设置对应不然拉去不到代码

Build Steps设置maven,选中你安装的maven名称,目标命令:拉取完代码后清理构建跳过测试生产target目录此时还在Jenkins服务器。

复制代码
clean package -DskipTests

SSH Publishers,选择我们要发布到哪台服务器上,就是前面在添加的170.111那台,配置命令做了下面两个步骤。

Transfer SetSource files:将target目录下所有.jar的文件和docker目录下的所有文件复制到远程应用服务器的/usr/local/test目录下。(Jenkins系统设置里面SSH添加服务器时设置的默认远程路径)

复制代码
target/*.jar docker/*

Exec command:这时170.111的/usr/local/test/目录下有target和docker两个目录。执行下面的代码命令把target目录下人jar包移动到Docker目录里来,然后在执行容器关闭和后台启动构建动作

复制代码
cd /usr/local/test/docker
mv ../target/*jar ./
docker compose down
docker compose up -d --build

Jenkins构建

点击Jenkins任务构建按钮,观看日志成功

复制代码
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  2.906 s
[INFO] Finished at: 2024-03-11T09:03:12Z
[INFO] ------------------------------------------------------------------------
SSH: Connecting from host [3821aea39450]
SSH: Connecting with configuration [应用服务器-170.111] ...
SSH: EXEC: completed after 3,402 ms
SSH: Disconnecting configuration [应用服务器-170.111] ...
SSH: Transferred 3 file(s)
Build step 'Send files or execute commands over SSH' changed build result to SUCCESS
Finished: SUCCESS

构建完成后,会看见在170.111服务器跑起来个名称叫mytest容器,映射端口7777,镜像mytest,版本v1.0

访问页面,192.168.170.111:7777

测试持续集成

修改项目代码

这里我修改默认的index.html页面内容

只需要把交代码提交到Gitlab

然后在Jenkins上,重新点击一下构建按钮,构建完成后刷新页面。

已经更新页面内容了,到此完成了CI持续集成动作。

注意

由于每次构建都会产生一个同名称同版本的镜像,导致出现多个为none的镜像,会占用磁盘空间

复制代码
[root@170.111 ~]# docker images
REPOSITORY                                                  TAG            IMAGE ID       CREATED         SIZE
mytest                                                      v1.0           79953e7736f6   19 hours ago    833MB
<none>                                                      <none>         341965b30bdb   19 hours ago    833MB
<none>                                                      <none>         5be66eda3a9f   21 hours ago    833MB
<none>                                                      <none>         76502810f6e2   21 hours ago    833MB
<none>                                                      <none>         a081353ee813   46 hours ago    816MB
<none>                                                      <none>         6274e74dbfe5   46 hours ago    816MB
<none>                                                      <none>         92517e725bf1   47 hours ago    816MB
<none>                                                      <none>         3e2cef065c83   47 hours ago    816MB
<none>                                                      <none>         62562f7fbc8f   47 hours ago    816MB
<none>                                                      <none>         cd7354c84a9e   2 days ago      816MB
<none>                                                      <none>         27e5c4ec8cf6   2 days ago      816MB
<none>                                                      <none>         4c0050b78b5f   2 days ago      816MB
<none>                                                      <none>         02a8eea88e51   2 days ago      816MB
<none>                                                      <none>         fb76f18fc433   2 days ago      816MB
<none>                                                      <none>         6a0d37f91dc0   2 days ago      816MB

可以通过Docker命令清理:docker image prune -f

复制代码
[root@170.111 ~]# docker image prune -f
Deleted Images:
deleted: sha256:92517e725bf1e5d7da3c1dda813abd0ecfb384e42e24274d688f178edb3274a5
deleted: sha256:6274e74dbfe5859d0c524cf944f4d6367f7ccb838b6959a2305cb3074a7a5db2
deleted: sha256:3e2cef065c83863c4fc72c6daaa91ad863ffb6169da989401439edd7b84da217
deleted: sha256:974684128082884b37b1ed66bdc92a0df158c46651bcc72a10016bc8254f5cc5
deleted: sha256:6a0d37f91dc07c88d018a2e5416a4421dacc03299d16af79fdac03863753cff5
deleted: sha256:ade3c592595e3988a9a11cecfc153d03c9125b3e0c24f0cdaf642cfadebd659a
deleted: sha256:27e5c4ec8cf67ea3e8fc1bf2e18328a63515d19332808480e263732347db96bf
deleted: sha256:4c0050b78b5f40dd2f005f92f7733c92f2ed8618e6e8deedcf72695795d2e07a
deleted: sha256:052d315bd2eb53b89eee437218b2abf0dc1a53db7fd6122fc8c56dcf8b0afb60
deleted: sha256:cd7354c84a9e307819628e3c7ac23c7d0d5a84783c659c3b85355f22fb12673e
deleted: sha256:6923a5cc1787c1a985feeec6efdb28ddb202cad65e6f3454bd2a08e8f1573326
deleted: sha256:02a8eea88e51a5874b2fbd14e267f717398251dc34f073ea5ca1bed4cf2c514e
deleted: sha256:62562f7fbc8f6f059072855fec452aa9ffd4927f130a069c59a0ee097b5d5ab4
deleted: sha256:a081353ee81397bb5464a44409248d0c192e7b57eb247af4ad74ef7f4454da68
deleted: sha256:0461e94f875334812d180c094c2a998d89ae74da08b6f34b0cedcdaf755126de
deleted: sha256:341965b30bdba2baabdddcdf3d5e3e98ff3c58eb696fe186c40646d05ffe7d9d
deleted: sha256:fb76f18fc433d3fbf8aa42dc0e2ee8dfaad6ee722fd1390288c37b7591cd7563
deleted: sha256:5be66eda3a9f5fbb5284e6e785a9cb5ac2484c6d5c53491d595a89192ca6aea3

也加到Jenkins执行命令中,就不用我们手动去清理了

相关推荐
小飞程序员7 天前
Docker本地部署gitlab实践(windows,linux)
devops
牛奶咖啡138 天前
DevOps自动化运维实践_使用再生龙对Linux系统进行备份还原
运维·自动化·devops·linux系统的备份还原·linux系统克隆备份·再生龙
IAR Systems8 天前
松下电工借助IAR CI/CD解决方案,实现品质与效率双重飞跃
ci/cd
Cherry的跨界思维8 天前
【AI测试全栈:质量】47、Vue+Prometheus+Grafana实战:打造全方位AI监控面板开发指南
vue.js·人工智能·ci/cd·grafana·prometheus·ai测试·ai全栈
海兰8 天前
Jina Embeddings V5 Text + Elasticsearch 9.x 本地部署指南
elasticsearch·jenkins·jina
觅特科技-互站8 天前
告别手动微调Prompt:DevOps用陌讯Skills重构AI运维工作流
运维·prompt·线性回归·kmeans·devops
luod8 天前
Docker 快速安装Jenkins
java·docker·jenkins
加农炮手Jinx9 天前
Flutter for OpenHarmony: Flutter 三方库 icon_font_generator 自动化将 SVG 图标集转化为字体文件(鸿蒙矢量资源全自动管理)
运维·flutter·华为·自动化·harmonyos·devops
小道仙979 天前
jenkins对接、jenkins-rest
java·servlet·jenkins·jenkins-rest
成为你的宁宁9 天前
Jenkins 自动化部署前后端分离若依项目全攻略:涵盖环境配置、Maven/Node.js 工具安装、GitLab 项目协同,及前后端构建、服务器推送与代码更新验证全步骤
node.js·自动化·gitlab·jenkins·maven