Ubuntu与GitLab集成方案:从安装配置到CI/CD自动化
GitLab与Ubuntu的集成第一步是将GitLab服务器部署在Ubuntu系统上,以下是详细流程:
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl openssh-server ca-certificates tzdata perl postfix
注意:
postfix用于GitLab的邮件通知(如密码重置),安装过程中可选择“Internet Site”配置邮件服务器。
通过官方脚本将GitLab的APT仓库添加到Ubuntu系统中,确保后续能获取最新版本的GitLab Community Edition(CE)。
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
使用APT包管理器安装GitLab CE,安装过程中会自动解决依赖关系。
sudo apt install -y gitlab-ce
编辑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
启动GitLab相关服务(包括Gitaly、Sidekiq、Nginx等),并设置为开机自启:
sudo gitlab-ctl start
sudo systemctl enable gitlab-runsvdir
在浏览器中输入配置的external_url(如http://192.168.1.100),按照提示设置管理员密码(root用户的初始密码),登录后即可进入GitLab控制台。
GitLab的CI/CD(持续集成/持续部署)是其核心功能之一,通过.gitlab-ci.yml文件定义自动化流程(构建、测试、部署),结合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
获取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(可被其他项目使用)
.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分支推送时触发(避免频繁部署)
.gitlab-ci.yml文件提交到GitLab仓库并推送(git add .gitlab-ci.yml && git commit -m "Add CI/CD config" && git push origin master"),GitLab会自动检测并启动流水线。ufw)允许80(HTTP)、443(HTTPS)端口。gitlab-rake gitlab:backup:create命令),并将备份文件存储到异地(如云存储)。通过以上步骤,可实现Ubuntu系统与GitLab的完整集成,涵盖服务器部署、代码管理、团队协作及自动化CI/CD流程,提升开发效率和代码质量。