温馨提示×

在Debian上如何使用GitLab CI/CD

小樊
37
2025-12-27 00:30:18
栏目: 智能运维

在 Debian 上使用 GitLab CI/CD 的完整实践

一 环境准备与 Runner 安装

  • 准备一台 Debian 主机(建议 Debian 10/11/12),具备 sudo 权限;如使用自托管 GitLab,需可访问实例地址。
  • 安装 GitLab Runner(执行 CI/CD 作业的代理):
    • 添加官方仓库并安装:
      curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
      sudo apt update && sudo apt install -y gitlab-runner
      
    • 注册 Runner(在项目 Settings → CI/CD → Runners 获取注册令牌):
      sudo gitlab-runner register \
        --url https://gitlab.com/ \
        --registration-token YOUR_REGISTRATION_TOKEN \
        --executor shell \
        --description "Debian Runner" \
        --tag-list "ci,linux"
      
    • 启动并验证:
      sudo systemctl start gitlab-runner
      sudo systemctl enable gitlab-runner
      sudo gitlab-runner status    # 应显示为 running
      
  • 如需隔离环境,可将执行器换为 docker,并在作业中指定镜像(见下文示例)。

二 编写 .gitlab-ci.yml 与触发流水线

  • 在项目根目录创建 .gitlab-ci.yml,定义 stagesjobsartifacts 与依赖关系:
    stages:
      - build
      - test
      - deploy
    
    variables:
      PROJECT_NAME: "my-debian-app"
      DOCKER_IMAGE: "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA"
    
    build_job:
      stage: build
      image: maven:3.9-openjdk-17   # 示例:使用容器化环境
      script:
        - ./mvnw package -DskipTests
      artifacts:
        paths:
          - target/*.jar
        expire_in: 1 hour
    
    test_job:
      stage: test
      image: maven:3.9-openjdk-17
      script:
        - ./mvnw test
      needs: ["build_job"]
    
    deploy_job:
      stage: deploy
      image: alpine:latest
      before_script:
        - apk add --no-cache openssh-client
        - eval $(ssh-agent -s)
        - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
        - mkdir -p ~/.ssh
        - chmod 700 ~/.ssh
        - ssh-keyscan production-server >> ~/.ssh/known_hosts
        - chmod 644 ~/.ssh/known_hosts
      script:
        - scp target/*.jar user@production-server:/opt/apps/
        - ssh user@production-server "systemctl restart my-app.service"
      only:
        - main
      needs: ["test_job"]
    
  • 提交并推送后,流水线会自动触发;也可在 CI/CD → Pipelines → Run pipeline 手动执行。查看作业日志请在 Jobs 页面点击对应任务。

三 远程部署与敏感信息管理

  • 使用 SSH 免密部署 是常见做法:
    • 生成密钥(本地或 Runner 主机):
      ssh-keygen -t rsa -b 4096 -C "gitlab-ci@debian-runner"
      
    • 将公钥(id_rsa.pub)追加到目标服务器的 ~/.ssh/authorized_keys
    • 在 GitLab 项目 Settings → CI/CD → Variables 添加私钥变量(如 SSH_PRIVATE_KEY),建议勾选 Masked 与(生产环境)Protected,类型可选 File
    • 在作业的 before_script 中启动 ssh-agent、添加私钥、信任目标主机并设定目录权限(见上例)。
  • 如需推送到 GitLab Container Registry,可使用内置变量(如 CI_REGISTRYCI_REGISTRY_IMAGECI_REGISTRY_USERCI_REGISTRY_PASSWORD)进行登录与推送(将变量设置为 Protected 以匹配受保护分支/标签)。

四 性能优化与安全加固

  • 提升构建速度:
    • 使用 cache 复用依赖缓存(如 Maven .m2Node.js node_modules):
      cache:
        paths:
          - .m2/repository/
          - node_modules/
        key: ${CI_COMMIT_REF_SLUG}
      
    • 优先选择 docker 执行器与合适的基础镜像,减少环境差异带来的问题。
  • 运行与资源安全:
    • 在自托管 Runner 的 /etc/gitlab-runner/config.toml 中配置 concurrentlimit 与资源隔离策略,避免单个作业耗尽主机资源。
    • API Key、密码、证书 等敏感信息统一放入 CI/CD Variables,并合理设置 ProtectedMasked;必要时使用 File 类型存放私钥或证书。

0