1. 前置准备:安装GitLab(若未部署)
在Linux服务器上安装GitLab是实现CI/CD的基础。以Ubuntu为例,步骤如下:
sudo apt-get install -y curl openssh-server ca-certificates tzdata perlcurl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bashsudo apt-get install gitlab-ce/etc/gitlab/gitlab.rb,设置external_url 'http://your-server-ip'(替换为服务器IP或域名),运行sudo gitlab-ctl reconfigure使配置生效sudo gitlab-ctl start,并设置开机自启:sudo systemctl enable gitlab-cehttp://your-server-ip完成GitLab初始化配置(设置root密码、管理员账号等)。2. 安装与注册GitLab Runner
GitLab Runner是执行CI/CD任务的代理,需单独安装并注册到GitLab实例:
curl -L --output /etc/apt/trusted.gpg.d/gitlab.asc https://packages.gitlab.com/gitlab/gitlab-runner/gpgkey
echo "deb https://packages.gitlab.com/gitlab/gitlab-runner/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/gitlab-runner.list
sudo apt-get update
sudo apt-get install gitlab-runner
sudo gitlab-runner register,按提示输入:
https://gitlab.com或你的自建GitLab地址);Settings→CI/CD→Runners中获取);shell,适用于简单任务;若需要隔离环境可选docker);linux,deploy,用于匹配项目中的Job标签)。3. 创建.gitlab-ci.yml配置文件
在项目根目录下创建.gitlab-ci.yml文件,定义CI/CD流程的核心逻辑(包括阶段、任务、产物等)。以下是一个通用示例:
stages:
- build # 构建阶段:编译代码、生成产物
- test # 测试阶段:运行单元测试、集成测试
- deploy # 部署阶段:将产物部署到目标环境
# 构建任务
build_job:
stage: build
script:
- echo "Building the project..."
- mkdir -p build
- cd build && cmake .. && make # 示例:C++项目构建
artifacts:
paths:
- build/*.jar # 保存构建产物(如Java的jar包)
expire_in: 1 hour # 产物过期时间(可选)
# 测试任务
test_job:
stage: test
script:
- echo "Running tests..."
- cd build && ctest # 示例:C++项目测试
needs: ["build_job"] # 依赖构建任务完成(可选,确保构建成功后再测试)
# 部署任务(仅master分支触发)
deploy_job:
stage: deploy
script:
- echo "Deploying to production server..."
- scp -r build/* user@remote-server:/var/www/html # 示例:SCP传输文件到Linux服务器
only:
- master # 仅当代码推送到master分支时触发(可选,可改为其他分支或标签)
关键说明:
stages:定义流程的阶段顺序(必填,任务按阶段依次执行);script:每个任务的具体执行命令(必填);artifacts:保存任务生成的产物(如编译后的文件、测试报告),供后续任务使用(可选);needs:指定任务依赖的其他任务(可选,确保依赖任务成功后再执行);only/except:控制任务触发的条件(如仅特定分支、标签或提交信息)(可选)。4. 配置CI/CD变量(可选但推荐)
若流程中需要敏感信息(如Docker Registry密码、服务器SSH密钥、第三方服务API密钥),可通过GitLab的CI/CD变量管理:
Settings→CI/CD→Variables;CI_DEPLOY_SERVER_SSH_KEY)和值(如服务器SSH私钥内容);.gitlab-ci.yml中通过$变量名引用(如ssh -i $CI_DEPLOY_SERVER_SSH_KEY user@remote-server)。5. 触发CI/CD流程
将.gitlab-ci.yml文件提交到GitLab仓库并推送,Runner会自动检测并执行流程:
git add .gitlab-ci.yml
git commit -m "Add GitLab CI/CD configuration"
git push origin master # 推送到master分支(根据only条件触发)
触发后,可在GitLab项目页面→CI/CD→Pipelines查看流程执行状态(成功/失败)、日志输出及每个任务的详情。
6. 监控与调试
CI/CD→Pipelines查看所有流程的执行历史,点击流程ID可查看详情;sudo journalctl -u gitlab-runner),或在任务日志中分析错误原因(如命令不存在、权限不足)。注意事项
artifacts保存必要产物(如编译后的文件、测试报告),避免占用过多存储空间;.gitlab-ci.yml中;package阶段用于打包、sonarqube阶段用于代码质量检查),或使用Docker executor实现环境隔离(如用Docker镜像运行任务,避免依赖服务器环境)。