gitlab在ubuntu上如何实现CI/CD
导读:GitLab在Ubuntu上实现CI/CD的完整步骤 1. 准备工作:安装GitLab(若未部署) 若尚未在Ubuntu上部署GitLab,需先完成安装。以下是Docker方式(推荐,便于管理)的安装步骤: 安装Docker和Docker...
GitLab在Ubuntu上实现CI/CD的完整步骤
1. 准备工作:安装GitLab(若未部署)
若尚未在Ubuntu上部署GitLab,需先完成安装。以下是Docker方式(推荐,便于管理)的安装步骤:
- 安装Docker和Docker Compose:
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' - 启动GitLab容器:
sudo docker-compose up -d - 访问
http://your-gitlab-domain,完成初始配置(设置root密码、创建项目等)。
2. 安装并注册GitLab Runner
GitLab Runner是执行CI/CD任务的代理,需在Ubuntu上安装并注册到GitLab项目。
- 安装Runner:
推荐使用Docker安装(轻量且隔离):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 - 注册Runner:
- 进入GitLab项目页面,点击Settings → CI/CD → Runners,复制Registration Token。
- 在Runner容器内执行注册命令(替换
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" - 注册成功后,Runner会出现在Runners列表中。
3. 创建.gitlab-ci.yml文件
在项目根目录下创建.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分支触发部署)。
4. 配置CI/CD变量(敏感信息管理)
若.gitlab-ci.yml中使用了敏感信息(如SSH私钥、Docker Hub密码、API密钥),需通过GitLab的CI/CD变量管理:
- 进入项目页面,点击Settings → CI/CD → Variables。
- 点击Add variable,输入:
- Key:变量名(如
SSH_PRIVATE_KEY、DOCKER_REGISTRY_PASSWORD)。 - Value:变量值(如SSH私钥内容、Docker Hub密码)。
- Type:选择
File(如SSH私钥)或Variable(如密码)。
- Key:变量名(如
- 勾选Mask variable(隐藏变量值,避免日志泄露),点击Add variable。
5. 触发CI/CD流程
- 自动触发:当代码推送到GitLab仓库(如
master分支)时,Runner会自动检测并执行.gitlab-ci.yml中的流程。 - 手动触发:进入项目CI/CD → Pipelines页面,点击Run pipeline,选择分支和变量(若有),手动启动流程。
6. 查看与调试流水线
- 查看流水线状态:进入项目CI/CD → Pipelines页面,可看到所有流水线的运行状态(成功/失败/进行中)。
- 查看任务日志:点击流水线中的某个任务(如
build_job),可查看详细日志(包括命令输出、错误信息),用于调试问题。
7. 高级配置(可选)
- 缓存依赖:加速构建过程,避免每次重新下载依赖(如
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) - 多环境部署:通过不同的Runner或变量实现(如
dev、staging、prod环境)。
通过以上步骤,即可在Ubuntu上实现GitLab的CI/CD流程,实现代码的自动化构建、测试和部署。根据项目需求,可进一步定制.gitlab-ci.yml文件(如添加代码质量检查、Docker镜像扫描等任务)。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: gitlab在ubuntu上如何实现CI/CD
本文地址: https://pptw.com/jishu/740703.html
