GitLab在Linux中的CI/CD实践
导读:Linux 上落地 GitLab CI/CD 的完整实践 一 架构与准备 组件与职责 GitLab 实例:托管代码与 CI/CD 流水线、Runner 注册与管理、制品与作业日志查看。 GitLab Runner:在 Linux 主机上...
Linux 上落地 GitLab CI/CD 的完整实践
一 架构与准备
- 组件与职责
- GitLab 实例:托管代码与 CI/CD 流水线、Runner 注册与管理、制品与作业日志查看。
- GitLab Runner:在 Linux 主机上执行作业,支持 Shell、Docker、Docker-in-Docker(DinD) 等执行器。
- .gitlab-ci.yml:定义 stages、jobs、variables、artifacts、cache、only/except 等流水线。
- 环境与网络
- 开放必要端口:SSH 22、HTTP 80、HTTPS 443;确保 Runner 能访问 GitLab 实例与部署目标。
- 建议为生产环境启用 HTTPS/证书 与 防火墙 策略,保护代码与凭据安全。
二 安装与注册 Runner
- 安装 Runner(Ubuntu/Debian 示例)
- 添加仓库并安装:
- curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
- sudo apt-get install -y gitlab-runner
- 添加仓库并安装:
- 安装 Runner(CentOS/RHEL 示例)
- 添加仓库并安装:
- curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
- sudo yum install -y gitlab-runner
- 添加仓库并安装:
- 注册 Runner
- 获取项目或实例的 Runner 注册令牌(项目路径:Settings → CI/CD → Runners)。
- 执行注册:sudo gitlab-runner register,按提示填写 GitLab 实例 URL 与 Token,选择 执行器(Shell/Docker/DinD),保存配置。
- 常用管理
- 查看状态:sudo gitlab-runner status
- 启动/停止:sudo gitlab-runner start/stop
- 注册为系统服务后随系统启动。
三 定义流水线 .gitlab-ci.yml
- 最小可用示例(多阶段)
- stages 顺序执行;artifacts 在阶段间传递产物;only 限定分支触发。
- 示例:
- stages:
- build
- test
- deploy
- variables:
- GIT_SUBMODULE_STRATEGY: recursive
- build_job:
- stage: build
- image: maven:3.6.3-jdk-8
- script:
- mvn clean package
- artifacts:
- paths:
- target/
- paths:
- test_job:
- stage: test
- script:
- mvn test
- deploy_job:
- stage: deploy
- script:
- scp -r target/* user@your_server_ip:/path/to/deploy
- only:
- master
- stages:
- Docker 构建与推送
- 使用 Docker-in-Docker 构建镜像并推送到仓库(示例):
- deploy:
- stage: deploy
- image: docker:dind
- variables:
- DOCKER_HOST: tcp://docker:2375
- script:
- docker login -u “$DOCKER_USERNAME” -p “$DOCKER_PASSWORD” “$DOCKER_REGISTRY”
- docker build -t “$DOCKER_REGISTRY/your_project:$CI_COMMIT_SHA” .
- docker push “$DOCKER_REGISTRY/your_project:$CI_COMMIT_SHA”
- deploy:
- 使用 Docker-in-Docker 构建镜像并推送到仓库(示例):
- 服务容器示例(集成测试)
- 在作业中启动依赖服务(如 PostgreSQL),便于集成测试:
- test:
- image: node:14
- services:
- postgres:13
- script:
- npm test
- test:
- 在作业中启动依赖服务(如 PostgreSQL),便于集成测试:
四 变量 安全与部署
- 变量与保护
- 在 Settings → CI/CD → Variables 添加敏感信息(如 SSH 私钥、Docker 凭据),勾选 Masked 与(必要时)Protected,避免明文出现在日志中。
- SSH 部署实践
- 将 SSH 私钥 配置为变量(如 SSH_PRIVATE_KEY),在作业中使用 ssh-agent 加载并部署:
- deploy_job:
- stage: deploy
- before_script:
- mkdir -p ~/.ssh
- echo “$SSH_PRIVATE_KEY” | tr -d ‘\r’ > ~/.ssh/id_rsa
- chmod 600 ~/.ssh/id_rsa
- ssh-keyscan your_server_ip > > ~/.ssh/known_hosts
- script:
- scp -r target/* user@your_server_ip:/path/to/deploy
- ssh user@your_server_ip “systemctl restart my_service”
- deploy_job:
- 将 SSH 私钥 配置为变量(如 SSH_PRIVATE_KEY),在作业中使用 ssh-agent 加载并部署:
- 镜像与 K8s 交付
- 构建并推送镜像后,结合 Kubernetes 进行滚动升级(示例):
- deploy_job:
- stage: deploy
- script:
- docker login -u “$DOCKER_USERNAME” -p “$DOCKER_PASSWORD” “$DOCKER_REGISTRY”
- docker build -t “$DOCKER_REGISTRY/your_project:latest” .
- docker push “$DOCKER_REGISTRY/your_project:latest”
- kubectl apply -f kubernetes/deployment.yaml
- deploy_job:
- 前提:Runner 环境已安装并配置 kubectl 与 Kubeconfig。
- 构建并推送镜像后,结合 Kubernetes 进行滚动升级(示例):
五 调试 优化与常见坑
- 调试与监控
- 在 CI/CD → Pipelines 查看作业日志与失败原因;必要时在作业中增加 set -x 输出调试信息。
- 性能优化
- 合理使用 cache 缓存依赖(如 node_modules、Maven .m2、Gradle ~/.gradle),减少重复下载与构建时间。
- Runner 与执行器选择
- Shell 执行器便于访问本机资源;Docker 执行器环境更一致;DinD 适合需要构建镜像的流水线(注意资源与网络配置)。
- 安全要点
- 禁止在 .gitlab-ci.yml 中明文写入密码/密钥;优先使用 Masked/Protected Variables 与 SSH 密钥;必要时启用 CI_JOB_TOKEN 的最小权限访问。
- 网络与防火墙
- 确保 Runner 能访问 GitLab 与 部署目标;生产环境开放 22/80/443 并配置 HTTPS/证书。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: GitLab在Linux中的CI/CD实践
本文地址: https://pptw.com/jishu/764306.html
