首页主机资讯GitLab在Linux中的CI/CD实践

GitLab在Linux中的CI/CD实践

时间2025-12-05 03:14:04发布访客分类主机资讯浏览813
导读: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 实例 URLToken,选择 执行器(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/
      • test_job:
        • stage: test
        • script:
          • mvn test
      • deploy_job:
        • stage: deploy
        • script:
          • scp -r target/* user@your_server_ip:/path/to/deploy
        • only:
          • master
  • 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”
  • 服务容器示例(集成测试)
    • 在作业中启动依赖服务(如 PostgreSQL),便于集成测试:
      • test:
        • image: node:14
        • services:
          • postgres:13
        • script:
          • npm test

四 变量 安全与部署

  • 变量与保护
    • 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”
  • 镜像与 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
    • 前提:Runner 环境已安装并配置 kubectlKubeconfig

五 调试 优化与常见坑

  • 调试与监控
    • CI/CD → Pipelines 查看作业日志与失败原因;必要时在作业中增加 set -x 输出调试信息。
  • 性能优化
    • 合理使用 cache 缓存依赖(如 node_modules、Maven .m2、Gradle ~/.gradle),减少重复下载与构建时间。
  • Runner 与执行器选择
    • Shell 执行器便于访问本机资源;Docker 执行器环境更一致;DinD 适合需要构建镜像的流水线(注意资源与网络配置)。
  • 安全要点
    • 禁止在 .gitlab-ci.yml 中明文写入密码/密钥;优先使用 Masked/Protected VariablesSSH 密钥;必要时启用 CI_JOB_TOKEN 的最小权限访问。
  • 网络与防火墙
    • 确保 Runner 能访问 GitLab部署目标;生产环境开放 22/80/443 并配置 HTTPS/证书

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: GitLab在Linux中的CI/CD实践
本文地址: https://pptw.com/jishu/764306.html
Linux环境下GitLab的日志管理方法 GitLab在Linux中的备份与恢复方法

游客 回复需填写必要信息