首页主机资讯CentOS上GitLab如何实现自动化运维

CentOS上GitLab如何实现自动化运维

时间2025-12-19 22:38:03发布访客分类主机资讯浏览1265
导读:在 CentOS 上,用 GitLab 实现自动化运维的核心思路是以 GitLab CI/CD 为引擎,配合 GitLab Runner、流水线即代码与安全的凭据管理,把构建、测试、部署与回滚串联为一条可重复执行的自动化链路。 整体架构与组...

在 CentOS 上,用 GitLab 实现自动化运维的核心思路是以 GitLab CI/CD 为引擎,配合 GitLab Runner、流水线即代码与安全的凭据管理,把构建、测试、部署与回滚串联为一条可重复执行的自动化链路。

整体架构与组件

  • GitLab CE/EE:代码托管、Issues、Merge Request、内置 CI/CD、Runner 管理。
  • GitLab Runner:执行 CI/CD 作业的代理,支持 Shell、Docker、Kubernetes 等 Executor,建议与 GitLab 分离部署。
  • 流水线即代码:项目根目录的 .gitlab-ci.yml 定义 stages、jobs、artifacts、cache、rules 等。
  • Secrets 管理:使用 CI/CD Variables / Masked / Protected 管理密钥,避免明文出现在代码或日志中。
  • 制品与部署目标:产物(如 JAR/WAR、Docker 镜像)、目标环境(物理机/虚拟机/容器/K8s)。

安装与初始化

  • 安装 GitLab(Omnibus 包):
    • 安装依赖与仓库:
      • sudo yum install -y curl openssh-server policycoreutils-python perl git nodejs rsync cronie postfix
      • sudo systemctl enable --now sshd postfix
      • sudo firewall-cmd --permanent --add-service=ssh --add-service=https & & sudo firewall-cmd --reload
      • curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
    • 安装并配置外部访问地址:
      • sudo EXTERNAL_URL=“https://gitlab.example.com” yum install -y gitlab-ce
      • sudo gitlab-ctl reconfigure
  • 安装 GitLab Runner(CentOS):
    • 添加仓库并安装:
      • curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
      • sudo yum install -y gitlab-runner
    • 注册 Runner(在项目 Settings → CI/CD → Runners 获取 URLRegistration token):
      • sudo gitlab-runner register --url < GitLab_URL> --registration-token --executor docker --tag-list “build,deploy” --description “gitlab-runner-centos” --run-untagged true --locked false
    • 常用命令:
      • sudo gitlab-runner list
      • sudo gitlab-runner restart
  • 安全建议:
    • external_url 配置 HTTPS(Let’s Encrypt 或企业 CA),并开启防火墙放行 443/80

CI/CD 流水线设计与示例

  • 典型 stages:build → test → deploy_staging → deploy_prod → notify
  • 示例一:基于 Shell 的 Spring Boot 应用(构建 JAR 并部署到目标主机)
    • .gitlab-ci.yml
      stages:
        - build
        - deploy_staging
        - deploy_prod
      
      variables:
        APP_NAME: myapp
        VERSION: $CI_COMMIT_SHORT_SHA
        ARTIFACT: target/$APP_NAME-$VERSION.jar
      
      build:
        stage: build
        tags: [build]
        script:
          - ./mvnw clean package -DskipTests
        artifacts:
          paths:
            - $ARTIFACT
      
      deploy_staging:
        stage: deploy_staging
        tags: [deploy]
        script:
          - scp $ARTIFACT $STAGING_USER@$STAGING_HOST:/opt/$APP_NAME/
          - ssh $STAGING_USER@$STAGING_HOST "systemctl restart $APP_NAME || true"
        only:
          - main
      
      deploy_prod:
        stage: deploy_prod
        tags: [deploy]
        script:
          - scp $ARTIFACT $PROD_USER@$PROD_HOST:/opt/$APP_NAME/
          - ssh $PROD_USER@$PROD_HOST "systemctl restart $APP_NAME || true"
        when: manual
        only:
          - main
      
    • Settings → CI/CD → Variables 中配置并保护:STAGING_USER、STAGING_HOST、PROD_USER、PROD_HOST,并开启 Masked
  • 示例二:基于 Docker 的流水线(构建镜像并推送到私有仓库)
    • .gitlab-ci.yml
      stages:
        - build
        - deploy
      
      variables:
        IMAGE: $CI_REGISTRY/myorg/$CI_PROJECT_NAME
        TAG: $CI_COMMIT_SHORT_SHA
      
      build:
        stage: build
        image: docker:20.10
        services:
          - docker:20.10-dind
        variables:
          DOCKER_TLS_CERTDIR: ""
        script:
          - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
          - docker build -t $IMAGE:$TAG .
          - docker push $IMAGE:$TAG
        only:
          - main
      
      deploy:
        stage: deploy
        image: alpine/ssh
        script:
          - ssh $DEPLOY_USER@$DEPLOY_HOST "docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY"
          - ssh $DEPLOY_USER@$DEPLOY_HOST "docker pull $IMAGE:$TAG"
          - ssh $DEPLOY_USER@$DEPLOY_HOST "docker rm -f $APP_NAME || true"
          - ssh $DEPLOY_USER@$DEPLOY_HOST "docker run -d --name $APP_NAME -p 8080:8080 $IMAGE:$TAG"
        only:
          - main
      
    • CI/CD → Variables 中配置并保护:CI_REGISTRY、CI_REGISTRY_USER、CI_REGISTRY_PASSWORD、DEPLOY_USER、DEPLOY_HOST

Runner 与执行器选择

  • Shell Executor:简单直接,适合已有服务器与脚本环境;注意 Runner 主机的权限与安全性。
  • Docker Executor:环境隔离、可复用,CI 中常用 docker:dind;需开启 privileged 或正确配置 rootless Docker,并设置 DOCKER_TLS_CERTDIR=“” 以简化本地开发/测试。
  • Kubernetes Executor:动态按需创建 Pod,资源弹性好,适合大规模与云原生场景;需准备 K8s 集群与 RBAC

安全与运维最佳实践

  • 凭据与权限:优先使用 Masked/Protected Variables;避免在代码中硬编码密码/密钥;对生产部署使用 when: manualapproval rules 做二次确认。
  • 镜像与制品:为镜像打上 $CI_COMMIT_SHORT_SHA 等不可变标签;产物使用 artifacts 传递,设置合适的 expire_in
  • 网络与防火墙:仅开放必要端口(如 22/80/443);Runner 与 GitLab、目标部署主机之间使用最小权限的 SSH 密钥或凭据。
  • 审计与回滚:在流水线中保留 日志与产物;生产发布保留上一个稳定版本镜像/产物,支持一键回滚。
  • 监控与告警:结合 GitLab Runner 监控、Prometheus/Grafana、Sentry 等,完善可观测性与故障响应。

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


若转载请注明出处: CentOS上GitLab如何实现自动化运维
本文地址: https://pptw.com/jishu/776742.html
CentOS如何解决GitLab安装问题 oracle在centos上如何启动

游客 回复需填写必要信息