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镜像运行任务,避免依赖服务器环境)。