若尚未在Ubuntu上部署GitLab,需先完成安装。以下是Docker方式(推荐,便于管理)的安装步骤:
sudo apt-get update
sudo apt-get install -y docker.io docker-compose
docker-compose.yml文件:version: '3'
services:
gitlab:
image: gitlab/gitlab-ce:latest
restart: always
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://your-gitlab-domain' # 替换为你的GitLab域名或IP
ports:
- '80:80'
- '443:443'
volumes:
- '/etc/gitlab:/etc/gitlab'
- '/var/run/docker.sock:/var/run/docker.sock'
- '/var/opt/gitlab:/var/opt/gitlab'
sudo docker-compose up -d
http://your-gitlab-domain,完成初始配置(设置root密码、创建项目等)。GitLab Runner是执行CI/CD任务的代理,需在Ubuntu上安装并注册到GitLab项目。
docker pull gitlab/gitlab-runner:latest
docker run -d --name gitlab-runner --restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v gitlab-runner-config:/etc/gitlab-runner \
gitlab/gitlab-runner:latest
YOUR_REGISTRATION_TOKEN和gitlab.com为你的Token和GitLab地址):docker exec -it gitlab-runner gitlab-runner register \
--non-interactive \
--executor "docker" \
--docker-image alpine:latest \ # 可根据项目需求更换镜像(如node、python等)
--url "http://gitlab.com" \
--registration-token "YOUR_REGISTRATION_TOKEN" \
--description "ubuntu-docker-runner" \
--tag-list "ubuntu,docker" \
--run-untagged="false" \
--locked="false"
在项目根目录下创建.gitlab-ci.yml文件,定义CI/CD流程(核心配置)。以下是一个通用示例(包含构建、测试、部署三个阶段):
stages:
- build # 构建阶段:编译代码、生成可执行文件
- test # 测试阶段:运行单元测试、集成测试
- deploy # 部署阶段:将应用部署到目标环境
variables:
DOCKER_IMAGE: "your-dockerhub-username/your-app:${CI_COMMIT_SHA}" # Docker镜像名称(含提交SHA)
build_job:
stage: build
image: docker:latest # 使用Docker镜像
services:
- docker:dind # 启用Docker-in-Docker(用于构建镜像)
variables:
DOCKER_HOST: tcp://docker:2375
DOCKER_TLS_CERTDIR: "" # 禁用TLS验证(仅测试环境使用,生产环境需开启)
script:
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY # 登录GitLab容器注册表
- docker build -t $DOCKER_IMAGE . # 构建Docker镜像
- docker push $DOCKER_IMAGE # 推送镜像到GitLab注册表
test_job:
stage: test
image: node:18 # 根据项目语言选择镜像(如python:3.9、java:11等)
script:
- npm install # 安装依赖(示例为Node.js项目)
- npm test # 运行测试
deploy_job:
stage: deploy
image: alpine:latest # 使用轻量级镜像
script:
- apk add --no-cache ssh # 安装SSH客户端(用于远程部署)
- echo "$SSH_PRIVATE_KEY" > /tmp/id_rsa # 读取私钥(需提前配置CI/CD变量)
- chmod 600 /tmp/id_rsa
- ssh -i /tmp/id_rsa -o StrictHostKeyChecking=no user@remote-server "cd /var/www/app && docker-compose pull && docker-compose up -d" # SSH到服务器,拉取最新镜像并重启服务
only:
- master # 仅master分支触发部署(可根据需求调整,如tags)
说明:
stages:定义流程的阶段顺序(必须按此顺序执行)。variables:定义全局变量(如Docker镜像名称、SSH私钥等)。image:指定任务运行的环境(如docker:latest用于Docker操作,node:18用于Node.js项目)。script:定义任务的具体命令(如构建镜像、运行测试、SSH部署)。only:限制任务触发的分支(如仅master分支触发部署)。若.gitlab-ci.yml中使用了敏感信息(如SSH私钥、Docker Hub密码、API密钥),需通过GitLab的CI/CD变量管理:
SSH_PRIVATE_KEY、DOCKER_REGISTRY_PASSWORD)。File(如SSH私钥)或Variable(如密码)。master分支)时,Runner会自动检测并执行.gitlab-ci.yml中的流程。build_job),可查看详细日志(包括命令输出、错误信息),用于调试问题。npm install、pip install)。示例:build_job:
cache:
paths:
- node_modules/ # 缓存node_modules目录
script:
- npm install
- npm run build
only/except限制任务执行条件(如仅在特定分支、标签或提交信息时触发)。示例:deploy_job:
only:
- tags # 仅当推送标签时触发部署(如v1.0.0)
dev、staging、prod环境)。通过以上步骤,即可在Ubuntu上实现GitLab的CI/CD流程,实现代码的自动化构建、测试和部署。根据项目需求,可进一步定制.gitlab-ci.yml文件(如添加代码质量检查、Docker镜像扫描等任务)。