创建项目
创建个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执行命令中,就不用我们手动去清理了