概述:
为一个Windows C++ 项目设置连续集成(CI)和持续部署(CD)流程,使用的是 GitLab CI/CD。这一教程适用于使用 Microsoft Visual Studio 2022 项目。
环境:
- GitLab服务器部署在一台Linux服务器
- 一台Windows服务器作为Windows环境下跑gitlab runner的机器
配置 GitLab Runner
安装 GitLab Runner
首先,需要在 Windows 服务器上安装 GitLab Runner。可以从 GitLab 官方网站 下载 Windows 版本的 GitLab Runner 安装程序。安装完成后,需要注册 Runner 到你的 GitLab 实例。
注册 GitLab Runner
注册 Runner 是将 Runner 连接到特定 GitLab 实例的过程。执行以下步骤来注册 Runner:
- 打开你的命令行界面。
- 执行
gitlab-runner register
命令。 - 提供 GitLab 实例的 URL。
- 输入为注册 Runner 生成的 token。这个 token 可以在项目的 Settings > CI/CD > Runners 部分找到。
- 选择执行器类型,如
shell
(对于 Windows 环境)。 - 完成后,Runner 将注册到 GitLab,并准备接收作业。
配置 .gitlab-ci.yml
使用 Runner
在项目根目录创建 .gitlab-ci.yml
文件,我这里的内容如下:
stages:
- build # 定义构建阶段
variables: # 定义全局环境变量
VS_PATH: "D:/software/Microsoft Visual Studio/2022/Community/Common7/Tools/VsDevCmd.bat" # Visual Studio 的命令行工具路径
BUILD_DIR: build # 构建输出目录
INSTALL_DIR: bin # 安装目录
OpenCV_DIR: "D:/software/opencv/build/x64/vc15/lib" # OpenCV 库路径
OPENSSL_ROOT_DIR: "C:/Program Files/OpenSSL-Win64" # OpenSSL 的根目录
build-job:
stage: build # 指定属于什么阶段
tags:
- windows # 指定运行这个作业的 GitLab Runner 标签
script: # 定义构建脚本
- echo "Compiling the code..." # 打印编译开始的信息
- powershell -Command '& $env:VS_PATH' # 运行 Visual Studio 的命令行环境
- powershell -Command 'cmake -S . -B $env:BUILD_DIR -G "Visual Studio 17 2022" -A x64
-DOpenCV_DIR:PATH=$env:OpenCV_DIR -DOPENSSL_ROOT_DIR:PATH=$env:OPENSSL_ROOT_DIR' # 配置项目
- powershell -Command 'cmake --build $env:BUILD_DIR --config Release -- /m' # 构建项目
- powershell -Command 'cmake --install $env:BUILD_DIR --prefix $env:INSTALL_DIR' # 安装构建结果到指定目录
- echo "Compile complete." # 编译完成提示信息
- powershell -Command 'Compress-Archive -Path $env:INSTALL_DIR/* -DestinationPath $env:INSTALL_DIR/output.zip' # 把安装软件打包成 ZIP 压缩文件
artifacts:
when: on_success # 仅在成功时保存构建产物
paths:
- $env:INSTALL_DIR/output.zip # 指定构建产物的保存路径
only:
- main # 仅在 main 分支上执行此作业
详细解释:
- powershell -Command '& $env:VS_PATH' # 运行 Visual Studio 的命令行环境
这里使用visual studio2022作为编译环境,因此首先要安装visual studio2022,使用VsDevCmd.bat配置命令行下的编译环境;
- powershell -Command 'cmake -S . -B $env:BUILD_DIR -G "Visual Studio 17 2022" -A x64
-DOpenCV_DIR:PATH=$env:OpenCV_DIR -DOPENSSL_ROOT_DIR:PATH=$env:OPENSSL_ROOT_DIR'
使用Cmake配置项目的具体命令,其中参数 -S
用于指定源代码的位置,这里的点(.
)代表当前目录,即 GitLab Runner 执行此命令时所在的目录。参数 -B
指定构建文件应生成到哪个目录。-G "Visual Studio 17 2022"
指定了 CMake 应该使用哪个生成器来创建项目文件。参数 -A
用来指定目标架构。
- powershell -Command 'cmake --install $env:BUILD_DIR --prefix $env:INSTALL_DIR'
这部分命令是 CMake 的安装命令。--prefix
是一个 CMake 安装选项,用来指定安装目录的前缀。
- powershell -Command 'Compress-Archive -Path $env:INSTALL_DIR/* -DestinationPath $env:INSTALL_DIR/outbut.zip'
这部分命令中 Compress-Archive
是 PowerShell 的一个内置 cmdlet,用于创建压缩存档。
artifacts:
when: on_success # 仅在成功时保存构建产物
paths:
- $env:INSTALL_DIR/output.zip # 指定构建产物的保存路径
only:
- main # 仅在 main 分支上执行此作业
最后artifacts
这个关键字声明接下来的设置都是关于构建产物的配置。on_success
意味着只有当该作业成功完成(即没有错误或失败)时,才会保存指定的 artifacts.
paths意味着 output.zip
位于由 INSTALL_DIR
环境变量指定的目录中,这个文件将在作业成功后被保存和归档。only
关键字表示这个作业配置只在针对 main
分支的推送或合并请求时运行。