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

相关推荐
XMYX-01 小时前
Python 操作 Elasticsearch 全指南:从连接到数据查询与处理
python·elasticsearch·jenkins
极小狐2 小时前
GitLab 如何降级?
gitlab·devsecops·devops·极狐gitlab·安全合规
极小狐3 小时前
极狐GitLab 发布安全补丁版本17.5.2, 17.4.4, 17.3.7
gitlab·devsecops·devops·极狐gitlab·安全合规
云深时现月3 小时前
jenkins使用cli发行uni-app到h5
前端·uni-app·jenkins
Vanish_ran3 小时前
gitlab与jenkins
运维·gitlab·jenkins
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ5 小时前
Elasticsearch的查询语法——DSL 查询
大数据·elasticsearch·jenkins
皮锤打乌龟13 小时前
(干货)Jenkins使用kubernetes插件连接k8s的认证方式
运维·kubernetes·jenkins
给我起把狙20 小时前
何为Jenkins
运维·jenkins
迷茫运维路20 小时前
docker搭建Jenkins2.346.3版本及常用工具集成配置(ldap、maven、ansible、npm等)
运维·docker·jenkins·cicd
未命名冀1 天前
微服务day07
微服务·架构·jenkins