温馨提示×

ubuntu与gitlab集成方案

小樊
49
2025-10-18 23:51:54
栏目: 智能运维

Ubuntu与GitLab集成方案:从安装配置到CI/CD自动化

一、GitLab服务器在Ubuntu上的安装与基础配置

GitLab与Ubuntu的集成第一步是将GitLab服务器部署在Ubuntu系统上,以下是详细流程:

1. 准备工作

  • 更新系统包并安装依赖:确保系统软件包为最新版本,安装GitLab所需的依赖服务(如SSH服务器、证书工具、时区数据等)。
    sudo apt update && sudo apt upgrade -y
    sudo apt install -y curl openssh-server ca-certificates tzdata perl postfix
    

    注意postfix用于GitLab的邮件通知(如密码重置),安装过程中可选择“Internet Site”配置邮件服务器。

2. 添加GitLab官方仓库

通过官方脚本将GitLab的APT仓库添加到Ubuntu系统中,确保后续能获取最新版本的GitLab Community Edition(CE)。

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash

3. 安装GitLab CE

使用APT包管理器安装GitLab CE,安装过程中会自动解决依赖关系。

sudo apt install -y gitlab-ce

4. 配置GitLab实例

编辑GitLab的主配置文件/etc/gitlab/gitlab.rb,设置外部访问URL(替换为服务器IP或域名,如http://192.168.1.100),这是GitLab的入口地址。

sudo nano /etc/gitlab/gitlab.rb
# 找到并修改以下行
external_url 'http://your-gitlab-domain-or-ip'
# 可选:设置时区(如上海)
gitlab_rails['time_zone'] = 'Asia/Shanghai'

保存后,运行以下命令使配置生效:

sudo gitlab-ctl reconfigure

5. 启动GitLab服务

启动GitLab相关服务(包括Gitaly、Sidekiq、Nginx等),并设置为开机自启:

sudo gitlab-ctl start
sudo systemctl enable gitlab-runsvdir

6. 访问GitLab Web界面

在浏览器中输入配置的external_url(如http://192.168.1.100),按照提示设置管理员密码(root用户的初始密码),登录后即可进入GitLab控制台。

二、GitLab与Ubuntu的进阶集成:CI/CD自动化

GitLab的CI/CD(持续集成/持续部署)是其核心功能之一,通过.gitlab-ci.yml文件定义自动化流程(构建、测试、部署),结合GitLab Runner(执行任务的代理)实现自动化。

1. 安装GitLab Runner

GitLab Runner是执行CI/CD任务的工具,需单独安装并注册到GitLab项目。以下是Docker方式安装(推荐,避免环境冲突):

# 拉取GitLab Runner镜像
docker pull gitlab/gitlab-runner:latest
# 启动Runner容器(挂载配置目录和Docker套接字,用于执行Docker任务)
docker run -d --name gitlab-runner \
  --restart always \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /srv/gitlab-runner/config:/etc/gitlab-runner \
  gitlab/gitlab-runner:latest

2. 注册GitLab Runner

获取Runner的注册令牌(在GitLab项目页面→Settings→CI/CD→Runners中复制),然后通过Docker容器注册Runner:

docker exec -it gitlab-runner gitlab-runner register \
  --non-interactive \
  --executor "docker" \          # 使用Docker执行任务
  --docker-image alpine:latest \ # 基础镜像(根据项目需求调整,如node:18、python:3.9)
  --url "http://your-gitlab-domain" \ # GitLab实例地址
  --registration-token "YOUR_REGISTRATION_TOKEN" \ # 复制的令牌
  --description "ubuntu-docker-runner" \ # Runner名称
  --tag-list "ubuntu,docker" \   # 标签(用于筛选Runner)
  --run-untagged="true" \        # 允许运行未打标签的任务
  --locked="false"               # 不锁定Runner(可被其他项目使用)

3. 创建.gitlab-ci.yml文件

在项目根目录下创建.gitlab-ci.yml文件,定义CI/CD流程(以下为示例,包含构建、测试、部署三个阶段):

stages:
  - build    # 构建阶段(如编译代码、安装依赖)
  - test     # 测试阶段(如运行单元测试、集成测试)
  - deploy   # 部署阶段(如将应用部署到服务器)

variables:
  DOCKER_IMAGE: "my-app:${CI_COMMIT_SHA}" # 定义Docker镜像名称(使用提交SHA作为版本)

build_job:
  stage: build
  image: node:18  # 使用Node.js 18镜像(根据项目语言调整)
  script:
    - echo "Installing dependencies..."
    - npm install
    - echo "Building project..."
    - npm run build
  artifacts:     # 将构建产物传递给后续任务
    paths:
      - dist/

test_job:
  stage: test
  image: node:18
  script:
    - echo "Running unit tests..."
    - npm test
  needs: ["build_job"]  # 依赖build_job(仅在build_job成功后运行)

deploy_job:
  stage: deploy
  image: docker:dind  # 使用Docker-in-Docker镜像(用于构建和推送Docker镜像)
  variables:
    DOCKER_HOST: tcp://docker:2375
    DOCKER_TLS_CERTDIR: ""  # 禁用TLS(仅测试环境使用,生产环境需开启)
  script:
    - echo "Logging in to Docker Registry..."
    - echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin $CI_REGISTRY
    - echo "Building Docker image..."
    - docker build -t $DOCKER_IMAGE .
    - echo "Pushing Docker image to registry..."
    - docker push $DOCKER_IMAGE
    - echo "Deploying to production server..."
    - ssh user@production-server "docker pull $DOCKER_IMAGE && docker stop my-app || true && docker rm my-app || true && docker run -d --name my-app -p 80:3000 $DOCKER_IMAGE"
  only: ["master"]  # 仅在master分支推送时触发(避免频繁部署)

4. 触发与监控CI/CD流水线

  • 触发流水线:将.gitlab-ci.yml文件提交到GitLab仓库并推送(git add .gitlab-ci.yml && git commit -m "Add CI/CD config" && git push origin master"),GitLab会自动检测并启动流水线。
  • 查看结果:在GitLab项目页面→CI/CD→Pipelines中查看流水线运行状态(成功/失败),点击具体任务可查看详细日志(如构建错误、测试失败原因)。

三、集成优化建议

  • 安全配置:为GitLab配置HTTPS(使用Let’s Encrypt免费证书),提升数据传输安全性;设置防火墙(ufw)允许80(HTTP)、443(HTTPS)端口。
  • 备份策略:定期备份GitLab数据(使用gitlab-rake gitlab:backup:create命令),并将备份文件存储到异地(如云存储)。
  • 性能优化:根据项目规模调整GitLab资源配置(如增加内存至4GB以上),避免因资源不足导致任务失败。

通过以上步骤,可实现Ubuntu系统与GitLab的完整集成,涵盖服务器部署、代码管理、团队协作及自动化CI/CD流程,提升开发效率和代码质量。

0