什么是CICD? GitLab + Jenkins 持续集成实战部署手册

GitLab + Jenkins 持续集成实验手册

适用场景:从零搭建一套完整的代码托管 + 持续集成 + 自动发布环境。开发者在 IDEA 中把代码推送到 GitLab ,Jenkins 从 GitLab 拉取代码,使用 Maven 编译打包(jar),再通过 Publish over SSH 自动发布到目标 Web 服务器 并启动运行。

本手册基于实际实验日志整理,已剔除调试过程中的报错与反复,保留完整、顺畅的标准操作流程。


实验拓扑与主机规划

text 复制代码
                 ┌──────────────────────────┐
   开发机 IDEA ──▶│  GitLab 10.1.8.130:82    │ 代码仓库(gitlab.ningcode.cn)
                 └────────────┬─────────────┘
                              │ 拉取源码
                              ▼
                 ┌──────────────────────────┐
                 │ Jenkins 10.1.8.131:8080   │ 持续集成(jenkins.ningcode.cn,Docker 容器)
                 └────────────┬─────────────┘
                              │ Publish over SSH 发布 jar
                              ▼
                 ┌──────────────────────────┐
                 │ Web 10.1.8.132            │ 目标服务器(web.ningcode.cn)
                 │ /usr/local/test           │ 应用运行目录
                 └──────────────────────────┘
主机 主机名 IP 地址 系统 部署软件 端口
代码仓库服务器 gitlab.ningcode.cn 10.1.8.130 CentOS 7 GitLab CE 12.4.2 82(Web)、22(SSH)
持续集成服务器 jenkins.ningcode.cn 10.1.8.131 CentOS 7 Docker CE 26.1.4 + Jenkins 2.346.3 容器 8080(Jenkins)
目标 Web 服务器 web.ningcode.cn 10.1.8.132 CentOS 7 应用运行环境(JDK 等) 22(SSH)

说明:三个节点的 IP/主机名按本实验实际环境填写,部署时替换成自己的地址即可。GitLab 使用 82 端口是为了与宿主机其他服务区分(也可直接用 80)。


Idea配置测试

一、GitLab 代码仓库服务器部署

1.1 基础环境准备

① 查看本机 IP,确认网络环境

shell 复制代码
ip -br a
# ens33  UP  10.1.8.130/24

② 设置主机名

shell 复制代码
hostnamectl set-hostname gitlab.ningcode.cn
bash        # 刷新主机名提示符

③ 安装依赖软件包

GitLab 依赖 SELinux 策略工具与 SSH 服务,先安装并升级相关软件包:

shell 复制代码
yum -y install policycoreutils openssh-server openssh-clients

④ 启动 sshd 与 postfix

shell 复制代码
systemctl enable sshd --now
systemctl enable postfix --now

知识补充:postfix 用于 GitLab 发送通知邮件(注册确认、找回密码等);sshd 用于 SSH 连接与后续 Git 的 SSH 协议访问。

⑤ 防火墙放行基础服务

shell 复制代码
firewall-cmd --add-service=ssh --permanent
firewall-cmd --add-service=http --permanent
firewall-cmd --reload

1.2 安装 GitLab CE

① 下载 GitLab CE 安装包

官方 yum 源在国内访问较慢,可先用浏览器/下载工具下载 rpm 包,再上传到服务器。下载地址(清华镜像):

text 复制代码
https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6/gitlab-ce-12.4.2-ce.0.el6.x86_64.rpm

说明:GitLab CE 12.4.2 支持 el6/el7 系统,本实验使用 el6 版本包在 CentOS 7 上安装,功能完全一致。

② 上传安装包并安装

在服务器终端使用 rz 上传 rpm 包,然后安装:

shell 复制代码
rz -E        # 选择 gitlab-ce-12.4.2-ce.0.el6.x86_64.rpm
rpm -ivh gitlab-ce-12.4.2-ce.0.el6.x86_64.rpm

安装完成后会提示:

text 复制代码
GitLab was unable to detect a valid hostname for your instance.
Please configure a URL for your GitLab instance by setting `external_url`

这说明还需要配置访问地址(下一步)。

1.3 修改 GitLab 配置(访问地址与端口)

编辑主配置文件:

shell 复制代码
vim /etc/gitlab/gitlab.rb

修改两处:

ruby 复制代码
# 第 23 行附近:改成自己的 IP + 端口
external_url 'http://10.1.8.130:82'

# 第 1112 行附近:让内置 Nginx 监听 82 端口
nginx['listen_port'] = 82

知识补充:external_url 是 GitLab 对外访问的统一入口地址,所有生成链接(项目地址、clone 地址、CI 回调等)都以它为前缀;nginx['listen_port'] 必须与 external_url 中的端口保持一致,否则会出现页面打不开或链接 404 的问题。

1.4 初始化并启动 GitLab

shell 复制代码
gitlab-ctl reconfigure

reconfigure 是 Omnibus 方式安装 GitLab 的核心命令,它会执行 Chef 初始化流程,自动完成:

  • 安装配置内置组件:PostgreSQL(数据库)、Redis(缓存)、Nginx(Web 入口)、Gitaly(Git 存储)、Sidekiq(后台任务)、Prometheus(监控)等;
  • 生成各组件配置文件与密钥;
  • 创建数据目录(/var/opt/gitlab/);
  • 启动全部服务。

初始化完成后重启所有服务使配置生效:

shell 复制代码
gitlab-ctl restart

放行 82 端口:

shell 复制代码
firewall-cmd --zone=public --add-port=82/tcp --permanent
firewall-cmd --reload

浏览器访问 http://10.1.8.130:82 即可打开 GitLab 登录页。

1.5 管理员账号与用户管理(rails console)

首次安装 GitLab 会自动生成管理员账号 root,初始密码保存在:

text 复制代码
/etc/gitlab/initial_root_password

注意:该密码文件仅在安装后 24 小时内存在,请及时登录并修改密码。

如果需要批量查看/修改用户,可以进入 Rails 控制台(生产环境)操作:

shell 复制代码
sudo gitlab-rails console -e production

查看全部用户:

ruby 复制代码
irb(main):001:0> User.all.each{|u| puts "id:#{u.id}  username:#{u.username}  email:#{u.email}"}
# id:2  username:wang  email:susan@qq.com
# id:1  username:root  email:admin@example.com

按用户名查找并重置密码:

ruby 复制代码
user = User.find_by(username: 'wang')
user.password = '新密码'
user.password_confirmation = '新密码'
user.skip_reconfirmation!
user.save!

输入 exit 退出控制台。

知识补充:gitlab-rails console 直接操作 GitLab 底层数据(Rails ORM),适合批量创建用户、重置密码、修改项目属性等网页端不好操作的任务,执行前建议先备份数据库。


二、目标 Web 服务器准备

Web 服务器是 Jenkins 发布 jar 包的落地点。

① 查看 IP 并设置主机名

shell 复制代码
ip -br a
# ens33  UP  10.1.8.132/24

hostnamectl set-hostname web.ningcode.cn
bash

② 创建发布目录

Publish over SSH 插件发布时需要目标目录真实存在,提前创建:

shell 复制代码
mkdir /usr/local/test

说明:/usr/local/test 就是 Jenkins 后续推送 jar 包和启动脚本的目标目录,可自定义,但需与 Jenkins 端配置保持一致。


三、Jenkins 持续集成服务器部署(Docker 容器化)

Jenkins 采用 Docker 容器方式部署,整体流程:安装 Docker → 导入 Jenkins 镜像 → docker-compose 启动 → 配置插件源/工具链。

3.1 安装 Docker CE

① 清理系统自带旧版 Docker

shell 复制代码
yum remove docker docker-common docker-selinux docker-engine

② 安装 Docker 依赖工具

shell 复制代码
yum install -y yum-utils device-mapper-persistent-data lvm2

③ 配置华为云 Docker 软件源

shell 复制代码
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's+download.docker.com+mirrors.huaweicloud.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

sed 将仓库地址中的 download.docker.com 全部替换为华为云镜像地址,之后 yum 安装就走国内源,速度快很多。

④ 安装 Docker CE

shell 复制代码
yum makecache fast
yum install docker-ce

本实验安装版本:docker-ce 26.1.4(含 containerd.io、docker-buildx-plugin、docker-compose-plugin 等依赖)。

3.2 配置镜像加速器

shell 复制代码
vim /etc/docker/daemon.json
json 复制代码
{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com"
  ]
}

重启 Docker 使其生效:

shell 复制代码
systemctl daemon-reload
systemctl restart docker
systemctl status docker
# Active: active (running)

知识补充:daemon.json 是 Docker 守护进程的配置文件,registry-mirrors 用于配置镜像加速源,解决官方仓库拉取慢/超时的问题。

3.3 导入 Jenkins 镜像

内网环境无法直接从 Docker Hub 拉取镜像时,可在有网环境 docker pull jenkins/jenkins:2.346.3-lts-jdk8 后导出,再上传到服务器导入。

shell 复制代码
rz -E          # 上传 jenkins_2.346.tar
docker load -i jenkins_2.346.tar
# Loaded image: jenkins/jenkins:2.346.3-lts-jdk8

说明:2.346.3-lts-jdk8 是 Jenkins LTS 长期支持版,镜像内自带 JDK 8,开箱即用。

3.4 准备 docker-compose 编排工具

上传 docker-compose 二进制文件到服务器并安装到 PATH:

shell 复制代码
chmod +x docker-compose
mv docker-compose /usr/local/bin/
docker-compose version

3.5 编写 docker-compose.yml 并启动

shell 复制代码
mkdir -p /usr/local/docker/jenkins_docker
cd /usr/local/docker/jenkins_docker/
vim docker-compose.yml
yaml 复制代码
version: '3'
services:
  jenkins:
    image: jenkins/jenkins:2.346.3-lts-jdk8
    container_name: jenkins
    restart: always
    ports:
      - "8080:8080"     # Jenkins Web 端口
      - "50000:50000"   # 构建代理(slave)通信端口
    volumes:
      - ./data:/var/jenkins_home   # 数据目录挂载,容器删了配置不丢

启动容器:

shell 复制代码
docker-compose up -d

3.6 修复数据目录权限

Jenkins 官方镜像默认以 jenkins 用户(UID 1000)运行,而宿主机挂载目录属主是 root,会导致容器内写不进去(日志报 Permission denied)。

解决方案:把宿主机 data 目录属主改成 UID 1000 对应的用户。

shell 复制代码
chown -R ningcode.cn:ningcode.cn /usr/local/docker/jenkins_docker/data
docker-compose restart

知识补充:id 1000 可查看 UID 1000 对应的用户名;容器内 UID 与宿主机 UID 一一对应,只要宿主机目录属主 UID 是 1000,容器内 jenkins 用户就有写权限。

3.7 获取初始管理员密码

首次启动 Jenkins 会自动生成随机管理员密码,通过日志或文件查看:

shell 复制代码
docker logs jenkins | grep password
# 或
cat /usr/local/docker/jenkins_docker/data/secrets/initialAdminPassword

本实验初始密码:55058aae637d4c3088e4a3983c6759b5

浏览器访问 http://10.1.8.131:8080,输入该密码完成初始化(创建管理员账号、安装推荐插件)。

3.8 切换插件更新源为国内镜像

Jenkins 默认插件源是官方站点,国内下载极慢。修改数据目录下的更新中心配置:

shell 复制代码
cd /usr/local/docker/jenkins_docker/data
vim hudson.model.UpdateCenter.xml
xml 复制代码
<?xml version='1.1' encoding='UTF-8'?>
<sites>
  <site>
    <id>default</id>
    <url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>
  </site>
</sites>

重启容器生效:

shell 复制代码
docker-compose restart

3.9 开启 IPv4 转发

容器访问外网(如 Maven 拉依赖、插件下载)依赖内核 IP 转发,默认是关闭的:

shell 复制代码
vim /etc/sysctl.conf
# 追加一行:
net.ipv4.ip_forward = 1

sysctl -p
# net.ipv4.ip_forward = 1

docker-compose restart

3.10 离线安装插件(可选)

内网环境无法在线安装插件时,把 .jpi 插件文件直接放入插件目录即可:

shell 复制代码
cd /usr/local/docker/jenkins_docker/data/plugins
rz -E          # 上传需要的插件包
chown -R ningcode.cn:ningcode.cn /usr/local/docker/jenkins_docker/data
docker-compose restart

说明:本实验用到的 publish-over-ssh(Publish over SSH)、git、maven-plugin、pipeline-、workflow- 等插件均已通过此方式离线安装好。

3.11 配置 JDK 与 Maven(挂载到 Jenkins 数据目录)

Jenkins 构建 Java 项目需要 JDK 与 Maven。把工具解压到 data 目录,容器内对应路径即为 /var/jenkins_home/xxx

① JDK 1.8

shell 复制代码
cd /usr/local/docker/jenkins_docker/data
rz -E          # 上传 jdk-8u171-linux-x64.tar.gz
tar -zxvf jdk-8u171-linux-x64.tar.gz
mv jdk1.8.0_171 ./jdk

验证容器内可见:

shell 复制代码
docker exec -it jenkins ls /var/jenkins_home/jdk
# bin  lib  ...(JDK 目录结构)

② Maven 3.6.2

shell 复制代码
rz -E          # 上传 apache-maven-3.6.2-bin.tar.gz
tar -zxvf apache-maven-3.6.2-bin.tar.gz
mv apache-maven-3.6.2 ./maven
chown -R ningcode.cn:ningcode.cn /usr/local/docker/jenkins_docker/data/

验证:

shell 复制代码
docker exec -it jenkins ls /var/jenkins_home/maven/bin
# m2.conf  mvn  mvn.cmd  mvnDebug  mvnDebug.cmd  mvnyjp

四、IDEA 推送代码到 GitLab

以 Spring Boot 示例项目 mytest 为例(接口 /test 返回 Ningcode无敌)。

4.1 GitLab 侧:创建项目

  1. root(或 wang)账号登录 http://10.1.8.130:82

  2. 右上角 新建项目 → 创建空白项目

    登录并创建项目

  3. 项目名称填 mytest,可见性选 私有(Private)内部(Internal)

  4. 创建完成后复制项目地址,例如:

text 复制代码
http://10.1.8.130:82/root/mytest.git

4.2 IDEA 侧:本地工程关联 Git

  1. 打开 mytest 工程,菜单 VCS → Enable Version Control Integration → Git
  2. VCS → Git → Remotes ,点击 + 添加远程仓库:
text 复制代码
Name:  origin
URL:   http://10.1.8.130:82/root/mytest.git
  1. 先把代码加入本地仓库:右键项目 → Git → Add
  2. 提交代码:Ctrl + K,填写提交信息,点击 Commit
  3. 推送代码:Ctrl + Shift + K,选择 origin 分支,点击 Push
  4. 首次推送会弹出认证窗口,输入 GitLab 账号密码(如 root/密码,或 wang/密码);
  5. 推送成功后 IDEA 右下角提示 Push successful

4.3 验证推送结果

回到 GitLab 网页打开 mytest 项目:

  • 代码(Code) 页签下能看到 pom.xmlsrc 等文件;
  • 提交(Commits) 页签能看到本次提交记录与提交人;
  • 项目主页显示分支 master(或 main)与提交信息。

知识补充:GitLab 项目地址支持 HTTP 与 SSH 两种协议。HTTP 每次推送需输入账号密码(可配置凭据保存);SSH 需在 用户设置 → SSH 密钥 中配置公钥后免密推送。本实验使用 HTTP 方式。


五、Jenkins 构建与自动发布配置

5.1 全局工具配置(Global Tool Configuration)

进入 系统管理 → Global Tool Configuration(全局工具配置)

① JDK 配置

  • 点击 新增 JDK
  • 名称填 JDK8
  • 取消勾选 "自动安装";
  • JAVA_HOME 填容器内的 JDK 路径:
text 复制代码
/var/jenkins_home/jdk

② Maven 配置

  • 点击 新增 Maven
  • 名称填 Maven3.6.2
  • 取消勾选 "自动安装";
  • MAVEN_HOME 填:
text 复制代码
/var/jenkins_home/maven

配置完成后点击 应用并保存

知识补充:由于 Jenkins 跑在容器里,这里填的路径是容器内路径(/var/jenkins_home/...),不是宿主机路径(/usr/local/docker/jenkins_docker/data/...),二者通过卷挂载一一对应。

5.2 配置 Publish over SSH(发布到 Web 服务器)

Publish over SSH 插件用于构建后把产物(jar)推送到目标服务器并执行远程命令。插件默认已安装,进入 系统管理 → 系统配置(Configure System) ,找到 Publish over SSH 区域。

① 新增 SSH Server

配置项 填写内容
Name web-server
Hostname 10.1.8.132
Username root
Password Web 服务器 root 密码
Remote Directory /usr/local/test

② 测试连接

点击 Test Configuration,提示连接成功说明配置无误(前提:Web 服务器上已创建 /usr/local/test 目录,见第二章)。

点击 应用并保存

知识补充:Publish over SSH 的原理是 Jenkins 通过 SSH 协议连接目标服务器,把源文件(Source files)传送到 Remote Directory,并可在 Exec command 中执行启动脚本等远程命令。用户名密码会以加密凭据形式存储在 Jenkins 中。

5.3 新建构建任务(mytest)

回到 Jenkins 首页,点击 新建任务

  • 任务名称:mytest
  • 类型:构建一个自由风格的软件项目(Freestyle project)

① 源码管理(Source Code Management)

  • 选择 Git
  • Repository URL:
text 复制代码
http://10.1.8.130:82/root/mytest.git
  • 凭据(Credentials):点击添加,填入 GitLab 的 root(或 wang)账号密码;
  • Branches to build:*/master(或 */main)。

② 构建触发器(Build Triggers)

可按需勾选:

  • 轮询 SCM(Poll SCM) :定期检查 GitLab 是否有新提交,如 H/5 * * * *(每 5 分钟);
  • 构建后构建其他工程 / 远程触发:用于与上下游任务联动。

③ 构建(Build)

点击 添加构建步骤 → Invoke top-level Maven targets

  • Maven 版本:选择 Maven3.6.2
  • 目标(Goals):
text 复制代码
clean package -DskipTests

参数说明:

参数 含义
clean 清除之前构建生成的文件(如 target 目录),确保全新构建
package 编译源代码并打包,生成可执行 jar/war 文件
-DskipTests 跳过单元测试的执行(仍会编译测试代码),加快构建速度

④ 构建后操作(Post-build Actions)

点击 添加构建后操作步骤 → Send build artifacts over SSH

配置项 填写内容
SSH Server 选择 web-server(上一步配置的)
Transfer Set Source files target/*.jar
Remote directory test(相对 Remote Directory)
Exec command 启动应用的命令,例如:cd /usr/local/test && java -jar mytest.jar &

说明:Source files 是相对工作区(workspace)的路径;最终文件会落在 Remote Directory + Remote directory 拼接出的目录,即 /usr/local/test/test,如需直接放到 /usr/local/test 可将 Remote directory 留空或写 .。Exec command 里的启动命令按自己项目实际写法调整。

点击 应用并保存

5.4 执行构建与验证

① 触发构建

进入 mytest 任务 → 点击 立即构建(Build Now) ;可在 构建历史 中点击构建号查看控制台输出。

构建过程依次执行:

  1. 从 GitLab 克隆源码到工作区 data/workspace/mytest/
  2. Maven 执行 clean package -DskipTests,编译并生成 target/mytest.jar
  3. 构建后操作通过 SSH 把 jar 推送到 Web 服务器 /usr/local/test
  4. 执行远程启动命令,应用在 Web 服务器上运行。

② 验证结果

shell 复制代码
# Jenkins 侧:确认工作区已生成 jar
docker exec -it jenkins bash
ls /var/jenkins_home/workspace/mytest/target/

# Web 服务器侧:确认 jar 已到位、进程已启动
ls /usr/local/test/
ps -ef | grep java

浏览器访问应用接口验证:

text 复制代码
http://10.1.8.132:8080/test

页面/接口返回 Ningcode无敌 即代表整套流水线打通:IDEA → GitLab → Jenkins → Web

提示:如果应用以 Docker 容器方式运行,基础镜像首次拉取较慢,建议提前在 daemon.json 中配置镜像加速器,或提前在有网环境导入镜像。


操作过程

Jenkins页面---系统管理---Global Tool Configuration(全局工具配置)

取消自动安装、指定容器中的jdk环境 /var/jenkins_home/jdk

设置容器中maven路径,设置完成后,直接应用并保存

Publish over SSH插件

用于推送到目标web服务器

查看插件默认已经安装

系统管理->Configure System(系统配置)

配置SSH目标服务器信息、目标主机root用户的密码

应用-保存,进行测试

缺少/user/local/test目录

shell 复制代码
[root@web ~ 18:36:08]# mkdir /usr/local/test

到目标web服务器上创建

第2次构建-编译jar包

返回工程-配置

选择构建,添加构建步骤

clean :清除之前构建生成的文件(如 target 目录),确保全新构建

package :编译源代码并打包生成可执行文件

-DskipTests :跳过单元测试的执行(但会编译测试代码)

应用并保存,进行构建

镜像已经跑起来了,但是下载速度太慢只有几十k

六、知识总结

6.1 GitLab Omnibus 核心组件

组件 作用
Nginx 统一 Web 入口,转发页面/API/Git 请求
PostgreSQL 元数据库(用户、项目、权限、Issue 等)
Redis 缓存与 Sidekiq 任务队列
Gitaly Git 仓库存储与 RPC 服务
Sidekiq 后台异步任务(邮件、仓库统计等)
Prometheus 内置监控指标采集

常用管理命令:

shell 复制代码
gitlab-ctl status          # 查看各组件状态
gitlab-ctl reconfigure     # 修改 gitlab.rb 后重新初始化
gitlab-ctl restart         # 重启所有组件
gitlab-ctl tail            # 跟踪日志
gitlab-rails console -e production   # Rails 控制台

6.2 Jenkins 关键目录(容器内 /var/jenkins_home)

路径 作用
secrets/initialAdminPassword 初始管理员密码
plugins/ 插件目录(.jpi 文件)
workspace/<任务名>/ 任务工作区(源码、构建产物)
jobs/ 任务配置与构建记录
hudson.model.UpdateCenter.xml 插件更新源配置
users/ 用户数据

6.3 完整 CI/CD 流程回顾

text 复制代码
IDEA 提交代码
   │  git push
   ▼
GitLab 代码仓库(10.1.8.130:82)
   │  Jenkins 触发构建
   ▼
Jenkins 拉取源码 → Maven clean package -DskipTests 编译打包
   │  Publish over SSH
   ▼
Web 服务器 /usr/local/test 部署并启动应用
   │
   ▼
浏览器访问 http://10.1.8.132:8080/test 验证

6.4 实验要点速记

  • GitLab 用 external_url 决定访问地址,改端口要同步改 nginx['listen_port']
  • Jenkins 容器化部署要解决数据目录权限(UID 1000)与插件源慢两个问题;
  • 容器内工具路径是 /var/jenkins_home/jdk/var/jenkins_home/maven,对应宿主机 data/jdkdata/maven
  • clean package -DskipTests 是 Maven 最常用的 CI 构建参数组合;
  • Publish over SSH 只需在 Web 服务器上有一个可写目录 + SSH 账号,即可完成自动发布。

七、附录:本实验用到的文件与版本

软件/文件 版本
GitLab CE 12.4.2(gitlab-ce-12.4.2-ce.0.el6.x86_64.rpm)
Docker CE 26.1.4(华为云源安装)
Jenkins 镜像 jenkins/jenkins:2.346.3-lts-jdk8(docker load 导入)
JDK jdk-8u171-linux-x64.tar.gz
Maven apache-maven-3.6.2-bin.tar.gz
docker-compose 独立二进制,安装到 /usr/local/bin
示例项目 Spring Boot 工程 mytest(GET /test → "Ningcode无敌")
插件 publish-over-ssh、git、maven-plugin、pipeline 系列(离线 .jpi)

原手册(gitlab+jenkins.md)中的图片均为上述各环节的操作步骤截图,本手册已用文字步骤完整还原,可直接对照执行。

第3次构建-推送jar至目标服务器

bash 复制代码
#到目标web服务器中查看jar包
[root@web ~ 15:41:27]# cd /usr/local/test/
[root@web test 15:41:44]# ls
target
[root@web test 15:41:52]# 
[root@web test 15:41:52]# cd target/
[root@web target 15:42:02]# ls
demo-0.0.1-SNAPSHOT.jar

第4次构建-拉取docker文件

bash 复制代码
#开发端创建Dockerfile
FROM openjdk:8
COPY demo-0.0.1-SNAPSHOT.jar /usr/local/
WORKDIR /usr/local
CMD java -jar demo-0.0.1-SNAPSHOT.jar
bash 复制代码
#创建docker-compose.yml文件
version: '3.1'
services:
  mytest:
    build:
      context: ./
      dockerfile: Dockerfile
    image: mytest:v1.0
    container_name: mytest
    ports:
      - "8080:8080"
第5次构建-目标服务器项目运行

在web目标服务器上部署docker环境

bash 复制代码
[root@web test 15:54:17]# yum install -y yum-utils device-mapper-persistent-data lvm2
[root@web test 15:54:54]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@web test 15:56:58]# systemctl disable firewalld.service --now
[root@web test 15:57:22]# setenforce 0
[root@web test 15:57:41]# yum install docker-ce -y
[root@web ~ 16:02:49]# systemctl enable docker --now

镜像加速

bash 复制代码
[root@web ~ 16:05:27]# vim /etc/docker/daemon.json 
[root@web ~ 16:06:49]# cat /etc/docker/daemon.json 
{
  "registry-mirrors": [ "https://e8e019c4e9b142a78961a95c6da13a9f.mirror.swr.myhuaweicloud.com" ]
}

重启docker服务

bash 复制代码
[root@web ~ 16:06:56]# systemctl daemon-reload
[root@web ~ 16:07:51]# systemctl restart docker
[root@web ~ 16:07:57]# vim /etc/sysctl.conf
[root@web ~ 16:08:18]# sysctl -p
net.ipv4.ip_forward = 1

docker-compose工具

bash 复制代码
[root@web ~ 16:09:11]# rz -E
rz waiting to receive.
[root@web ~ 16:09:33]# chmod +x docker-compose
[root@web ~ 16:09:41]# mv docker-compose /usr/local/bin/

返回工程-配置-构建后操作

进行构建,查看显示(下载openjdk:8镜像速度慢,可以多构建几次)现在web服务器上把镜像pull下来会好很多

访问目标服务器地址,可以成功访问网站

参数化构建

参数化构建是一种允许在触发构建时通过动态传入参数来定制构建流程的功能。

项目-配置-general

选择git参数

设置git参数

添加构建步骤

先执行,要拖拽到构建选项的置顶位置

先切换版本,保存,再编译打包构建

回到gitlab服务器,再项目上选择tag标签

创建新标签

设置版本号并创建

创建成功

Windows系统中idea修改TestController代码

修改docker-compose.yml代码

提交代码修改名称

push到gitlab,gitlab上查看,提交成功

创建v2.0标签

现在项目已经有两个版本

根据版本,选择构建

打开目标web服务器地址可以看到版本1.0的网页内容呈现

再继续构建版本v2.0

点击刷新网页就可以看到内容更新

相关推荐
好评12419 分钟前
【Linux】传输层协议UDP
linux·运维·udp
Csxyzj29 分钟前
基于Linux+Docker NAT的Ollama多实例负载均衡部署
运维·docker·容器
流光D33 分钟前
AI时代,搭建 web 站点并配置 nginx 反向代理流程
运维·服务器·前端·人工智能·nginx·ai·ai编程
GreatVicent36 分钟前
AI Agent互操作标准化加速:A2A协议正式加入Linux基金会
linux·运维·人工智能·agent·aws·a2a
Huangjin007_1 小时前
【Linux 系统篇(十六)】进程(四) : 僵尸进程、孤儿进程、进程优先级
linux·运维·服务器
cui_hao_nan1 小时前
Git常用命令1
运维·git
瞬间&永恒~1 小时前
【Kubernetes】(十五)维护与升级、ETCD 备份和恢复
linux·运维·docker·云原生·kubernetes
姚永强2 小时前
gitlab安装
运维·gitlab
希望奇迹很安静2 小时前
Linux基本使用命令
linux·运维·服务器