如何通过学习Ubuntu GitLab自动化部署,轻松实现高效运维?
- 内容介绍
- 文章标签
- 相关推荐
再看痛点,手动部署让运维陷入低效循环
很多团队在 Ubuntu 上仍然采用手动登录服务器、拉取代码、重新启动的方式进行发布。这不仅耗费大量时间,还容易因为操作失误导致环境不一致、回滚困难还有线上故障频发。是在频繁迭代的项目中,人工干预成为了瓶颈。严重影响了交付速度和程序稳定性。
为什么选择 Ubuntu + GitLab CI/CD 自动运行部署?
GitLab 的 CI/CD 功能能够在代码提交时自动触发建立、测试和部署流程;Runner 在 Ubuntu 上以轻量级进程执行任务,无需额外的集群管理。结合 Ubuntu 的稳定性与丰富的软件源。可快速搭建可靠的自动化运维网站,彻底解放人力。
主要优势
- 零人工干预:代码推送即自动完成编译、打包与上线。
- 环境一致性:每次建立都在相同的 Runner 环境中进行,避免“在我机器上能跑”的问题。
- 快速回滚:通过 Git 历史版本快速切换到之前的镜像或制品。
- 可视化流水线:GitLab UI 直观展示每个阶段状态,便于排查问题。
至于前置准备,确保基础设施就绪
1. 程序与网络要求
- Ubuntu 20.04 LTS 或更高版本。
- 防火墙放行 SSH 、HTTP 、HTTPS。如使用自定义端口请相应放行。
-
确保目标服务器能够访问 GitLab 实例(如
https://gitlab.example.com).
2. 必要软件安装
# 更新包索引
sudo apt update
# 安装基础工具
sudo apt install -y curl gnupg2 ca-certificates lsb-release ubuntu-keyring
# 安装 Git
sudo apt install -y git
# 安装 Nginx 作为示例应用服务器
sudo apt install -y nginx
再看步骤一,在 Ubuntu 上安装并配置 GitLab Runner
1. 添加官方仓库并安装 Runner
# 导入 GPG 公钥
curl -L https://packages.gitlab.com/gitlab/gitlab-runner/gpgkey | sudo apt-key add -
# 添加 APT 源
echo "deb https://packages.gitlab.com/gitlab/gitlab-runner/ubuntu $ main" | sudo tee /etc/apt/sources.list.d/gitlab-runner.list
# 安装 Runner
sudo apt update
sudo apt install -y gitlab-runner
2. 注册 Runner
sudo gitlab-runner register \
--url https://gitlab.example.com \
--registration-token YOUR_REGISTRATION_TOKEN \
--executor shell \
--description "ubuntu-deploy-runner" \
--tag-list deploy。
ubuntu \
--run-untagged true \
--locked false
注:-registration-token- 在项目的
使用 Docker 执行器以获得更干净的环境
sudo apt install -y docker.io
sudo usermod -aG docker gitlab-runner # 让 Runner 能够使用 Docker
sudo systemctl restart gitlab-runner
# 注册时选择 executor: docker 和镜像例如: ruby:latest 或您自己的镜像
从步骤二来看,配置目标服务器免密 SSH
1. 在 Runner 上生成 SSH key
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_deploy -N ""
cat ~/.ssh/id_rsa_deploy.pub # 输出公钥内容
.将公钥添加到目标服务器的 authorized_keys
# 在目标服务器上
sudo mkdir -p /home/deploy/.ssh
echo "YOUR_PUBLIC_KEY_CONTENT">> /home/deploy/.ssh/authorized_keys
sudo chown -R deploy:deploy /home/deploy/.ssh
sudo chmod 700 /home/deploy/.ssh
sudo chmod 600 /home/deploy/.ssh/authorized_keys
.赋予部署使用者必要权限
sudo usermod -aG www-data deploy # 若 Nginx 数据目录属于 www-data
sudo chown -R deploy:deploy /var/www/html # 您的部署目录
从.步骤三来看,编写 .gitlab-ci.yml — 自动化流水线主要
..此文件定义了建立、测试与部署三个阶段。根据实际需求增删阶段或修改脚本即可。.
.
至于stages。- build
- test # 若无测试可直接注释或删除该阶段
- deploy
variables: DEPLOYUSER: "deploy" DEPLOYHOST: "your-server.example.com" DEPLOY_DIR: "/var/www/html"
再看build,stage: build 说到script,# 建立示例:仅复制静态文件;其实,实际项目请替换为您的编译命令 - mkdir -p build-output - cp -r * build-output/ # 若需要打包: #- tar czf build-output/app.tar.gz . artifacts: paths这方面。- build-output/ expire_in: 1 hour
再看test,stage: test 从script来看,# 放置单元测试、lint 或安全检查命令;若无则留空或使用 echo 跳过。#- echo "No tests defined" 从only来看,#- branches # 若只想在某些分支跑测试,可自行调整
从deploy来看,stage: deploy 说到script。#- 安全传输制品至目标服务器 #- scp -o StrictHostKeyChecking=no build-output/* ${DEPLOYUSER}@${DEPLOYHOST}:${DEPLOYDIR}/. #- ssh ${DEPLOYUSER}@${DEPLOYHOST} " cd ${DEPLOYDIR};# 若是压缩包则先解压,# tar xzf app.tar.gz && rm app.tar.gz;sudo systemctl reload nginx # 或重启您的应用服务" 说到when,onsuccess # 建立与测试成功后才执行部署. 从only来看。#- main # 指定触发分支,常用 main/master 或 release/*. 说到tags,#- deploy # 必须匹配注册时设置的 tag-list。environment: 从name来看,production # 再看url,https://your-server.example.com # onstop: stopjob # stopjob: 再看stage,deploy # 再看script,#- ssh ${DEPLOYUSER}@${DEPLOYHOST} "echo 'Manual stop triggered'" 从when来看。manual # 说到only,#- main # 说到tags,-.deploy# environment: 至于name,production # 再看action,stop # .
-
.
-
.向受保护分支(如
) 推送一次提交。
.
-
.在 GitLab 项目页 →
查看流水线是否成功通过
.
- .登录目标服务器检查部署目录是否已更新。并确认服务已正常重载. .
- .若出现失败,查看 Job 日志;说起来,常见原因包括 SSH 公钥未正确添加、Runner 没有执行权限或变量未正确注入. .
- .后续每次代码推送均会自动触发相同流程。彻底告别人工登录、操作失望和环境漂移**..
再看痛点,手动部署让运维陷入低效循环
很多团队在 Ubuntu 上仍然采用手动登录服务器、拉取代码、重新启动的方式进行发布。这不仅耗费大量时间,还容易因为操作失误导致环境不一致、回滚困难还有线上故障频发。是在频繁迭代的项目中,人工干预成为了瓶颈。严重影响了交付速度和程序稳定性。
为什么选择 Ubuntu + GitLab CI/CD 自动运行部署?
GitLab 的 CI/CD 功能能够在代码提交时自动触发建立、测试和部署流程;Runner 在 Ubuntu 上以轻量级进程执行任务,无需额外的集群管理。结合 Ubuntu 的稳定性与丰富的软件源。可快速搭建可靠的自动化运维网站,彻底解放人力。
主要优势
- 零人工干预:代码推送即自动完成编译、打包与上线。
- 环境一致性:每次建立都在相同的 Runner 环境中进行,避免“在我机器上能跑”的问题。
- 快速回滚:通过 Git 历史版本快速切换到之前的镜像或制品。
- 可视化流水线:GitLab UI 直观展示每个阶段状态,便于排查问题。
至于前置准备,确保基础设施就绪
1. 程序与网络要求
- Ubuntu 20.04 LTS 或更高版本。
- 防火墙放行 SSH 、HTTP 、HTTPS。如使用自定义端口请相应放行。
-
确保目标服务器能够访问 GitLab 实例(如
https://gitlab.example.com).
2. 必要软件安装
# 更新包索引
sudo apt update
# 安装基础工具
sudo apt install -y curl gnupg2 ca-certificates lsb-release ubuntu-keyring
# 安装 Git
sudo apt install -y git
# 安装 Nginx 作为示例应用服务器
sudo apt install -y nginx
再看步骤一,在 Ubuntu 上安装并配置 GitLab Runner
1. 添加官方仓库并安装 Runner
# 导入 GPG 公钥
curl -L https://packages.gitlab.com/gitlab/gitlab-runner/gpgkey | sudo apt-key add -
# 添加 APT 源
echo "deb https://packages.gitlab.com/gitlab/gitlab-runner/ubuntu $ main" | sudo tee /etc/apt/sources.list.d/gitlab-runner.list
# 安装 Runner
sudo apt update
sudo apt install -y gitlab-runner
2. 注册 Runner
sudo gitlab-runner register \
--url https://gitlab.example.com \
--registration-token YOUR_REGISTRATION_TOKEN \
--executor shell \
--description "ubuntu-deploy-runner" \
--tag-list deploy。
ubuntu \
--run-untagged true \
--locked false
注:-registration-token- 在项目的
使用 Docker 执行器以获得更干净的环境
sudo apt install -y docker.io
sudo usermod -aG docker gitlab-runner # 让 Runner 能够使用 Docker
sudo systemctl restart gitlab-runner
# 注册时选择 executor: docker 和镜像例如: ruby:latest 或您自己的镜像
从步骤二来看,配置目标服务器免密 SSH
1. 在 Runner 上生成 SSH key
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_deploy -N ""
cat ~/.ssh/id_rsa_deploy.pub # 输出公钥内容
.将公钥添加到目标服务器的 authorized_keys
# 在目标服务器上
sudo mkdir -p /home/deploy/.ssh
echo "YOUR_PUBLIC_KEY_CONTENT">> /home/deploy/.ssh/authorized_keys
sudo chown -R deploy:deploy /home/deploy/.ssh
sudo chmod 700 /home/deploy/.ssh
sudo chmod 600 /home/deploy/.ssh/authorized_keys
.赋予部署使用者必要权限
sudo usermod -aG www-data deploy # 若 Nginx 数据目录属于 www-data
sudo chown -R deploy:deploy /var/www/html # 您的部署目录
从.步骤三来看,编写 .gitlab-ci.yml — 自动化流水线主要
..此文件定义了建立、测试与部署三个阶段。根据实际需求增删阶段或修改脚本即可。.
.
至于stages。- build
- test # 若无测试可直接注释或删除该阶段
- deploy
variables: DEPLOYUSER: "deploy" DEPLOYHOST: "your-server.example.com" DEPLOY_DIR: "/var/www/html"
再看build,stage: build 说到script,# 建立示例:仅复制静态文件;其实,实际项目请替换为您的编译命令 - mkdir -p build-output - cp -r * build-output/ # 若需要打包: #- tar czf build-output/app.tar.gz . artifacts: paths这方面。- build-output/ expire_in: 1 hour
再看test,stage: test 从script来看,# 放置单元测试、lint 或安全检查命令;若无则留空或使用 echo 跳过。#- echo "No tests defined" 从only来看,#- branches # 若只想在某些分支跑测试,可自行调整
从deploy来看,stage: deploy 说到script。#- 安全传输制品至目标服务器 #- scp -o StrictHostKeyChecking=no build-output/* ${DEPLOYUSER}@${DEPLOYHOST}:${DEPLOYDIR}/. #- ssh ${DEPLOYUSER}@${DEPLOYHOST} " cd ${DEPLOYDIR};# 若是压缩包则先解压,# tar xzf app.tar.gz && rm app.tar.gz;sudo systemctl reload nginx # 或重启您的应用服务" 说到when,onsuccess # 建立与测试成功后才执行部署. 从only来看。#- main # 指定触发分支,常用 main/master 或 release/*. 说到tags,#- deploy # 必须匹配注册时设置的 tag-list。environment: 从name来看,production # 再看url,https://your-server.example.com # onstop: stopjob # stopjob: 再看stage,deploy # 再看script,#- ssh ${DEPLOYUSER}@${DEPLOYHOST} "echo 'Manual stop triggered'" 从when来看。manual # 说到only,#- main # 说到tags,-.deploy# environment: 至于name,production # 再看action,stop # .
-
.
-
.向受保护分支(如
) 推送一次提交。
.
-
.在 GitLab 项目页 →
查看流水线是否成功通过
.
- .登录目标服务器检查部署目录是否已更新。并确认服务已正常重载. .
- .若出现失败,查看 Job 日志;说起来,常见原因包括 SSH 公钥未正确添加、Runner 没有执行权限或变量未正确注入. .
- .后续每次代码推送均会自动触发相同流程。彻底告别人工登录、操作失望和环境漂移**..

