Gitlab CI Runner预定义宏MSBuild
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gitlab CI Runner预定义宏MSBuild相关的知识,希望对你有一定的参考价值。
您好我正在尝试使用环境变量作为Gitlab运行程序设置中的MSBuild过程的一部分来传递CI_PIPELINE_ID和CI_COMMIT_SHA来构建具有增量构建ID的应用程序并提交sha来跟踪二进制文件版本。
我的.gitlab-ci.yml配置如下:
variables:
Solution: Project.sln
before_script:
- "echo off"
- 'call "%VS140COMNTOOLS%vsvars32.bat"'
- echo.
- set
- echo.
- echo %HALCONROOT%|find "13" >nul
- if errorlevel 1 (echo not13) else (set HALCONVERSION=HALCON_13)
stages:
- build
build:
stage: build
script:
- echo building...
- 'msbuild.exe /p:Configuration="Release" /p:Platform="x64" "%Solution%"'
tags:
- "HALCON 13"
except:
- tags
在我的c ++项目中,如何访问这样的环境变量需要做什么?
#ifndef CI_COMMIT_SHA
#define COMMIT_SHA 0
#else
#define COMMIT_SHA CI_COMMIT_SHA
#endif
答案
您可以使用Settings --> CD/CD --> Secret variables
定义要在.yml中使用的变量,例如:
然后你可以使用它如下:
script:
- echo $USERNAME
关于在C ++中访问环境变量,您可以尝试:
std::string getEnvVar( std::string const & key ) const
{
char * val = getenv( key.c_str() );
return val == NULL ? std::string("") : std::string(val);
}
另一答案
通过在属性页面上将以下代码添加到C / C ++命令行来解决此问题。
/D CI_PIPELINE_ID=$(CI_PIPELINE_ID) /D CI_COMMIT_SHA=$(CI_COMMIT_SHA)
但是,当您未在CI环境中运行并且从How to test if preprocessor symbol is #define'd but has no value?获取以下检查并已修改时,您现在必须检查这些是否为空。 (当定义为空时,EXPAND函数中需要A + 0以防止C4003警告。
#define DO_EXPAND(VAL) VAL ## 1
#define EXPAND(VAL) DO_EXPAND(VAL)
#define DO_QUOTE(X) #X
#define QUOTE(X) DO_QUOTE(X)
#if !defined(CI_PIPELINE_ID) || (EXPAND(CI_PIPELINE_ID + 0) == 1)
#define VERSION_BUILD 9999
#else
#define VERSION_BUILD CI_PIPELINE_ID
#endif
#if !defined(CI_COMMIT_SHA)
#define COMMIT_SHA ""
#else
#define COMMIT_SHA CI_COMMIT_SHA
#endif
以上是关于Gitlab CI Runner预定义宏MSBuild的主要内容,如果未能解决你的问题,请参考以下文章
GitLab CI shell runner不继承系统环境变量
Gitlab CI持续集成 - GitLab Runner 安装与注册