CentOS上GitLab如何实现自动化运维
导读:在 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 获取 URL 与 Registration 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。
- .gitlab-ci.yml
- 示例二:基于 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。
- .gitlab-ci.yml
Runner 与执行器选择
- Shell Executor:简单直接,适合已有服务器与脚本环境;注意 Runner 主机的权限与安全性。
- Docker Executor:环境隔离、可复用,CI 中常用 docker:dind;需开启 privileged 或正确配置 rootless Docker,并设置 DOCKER_TLS_CERTDIR=“” 以简化本地开发/测试。
- Kubernetes Executor:动态按需创建 Pod,资源弹性好,适合大规模与云原生场景;需准备 K8s 集群与 RBAC。
安全与运维最佳实践
- 凭据与权限:优先使用 Masked/Protected Variables;避免在代码中硬编码密码/密钥;对生产部署使用 when: manual 或 approval 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
