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

相关推荐
苦逼IT运维12 小时前
YUM 源与 APT 源的详解及使用指南
linux·运维·ubuntu·centos·devops
henan程序媛1 天前
Jenkins Pipline流水线
运维·pipeline·jenkins
陌殇殇殇1 天前
使用GitLab CI构建持续集成案例
运维·ci/cd·云原生·容器·kubernetes·gitlab
吕玉生1 天前
基于GitLab 的持续集成环境
ci/cd·gitlab
wudinaniya2 天前
使用rsync+jenkins实现服务自动部署全流程
运维·jenkins·自动化部署
henan程序媛3 天前
jenkins项目发布基础
运维·gitlab·ansible·jenkins
小石潭记丶3 天前
elasticsearch设置账号和密码
大数据·elasticsearch·jenkins
苦逼IT运维3 天前
正向代理与反向代理:原理、区别以及应用(Nginx 和 Tomcat)
运维·服务器·nginx·云原生·tomcat·devops
识途老码3 天前
Centos7安装Jenkins
运维·servlet·jenkins
奔跑吧邓邓子3 天前
Jenkins从入门到精通,构建高效自动化流程
servlet·自动化·jenkins