Gitlab CI Runner预定义宏MSBuild

时间:2017-12-18 21:47:47

标签: c++ visual-studio msbuild gitlab

您好我尝试在Gitlab运行程序设置中使用环境变量作为MSBuild流程的一部分,以传递CI_PIPELINE_ID和CI_COMMIT_SHA来构建具有增量构建ID的应用程序,并提交sha以跟踪二进制文件版本。< / p>

我的.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

2 个答案:

答案 0 :(得分:2)

您可以使用Settings --> CD/CD --> Secret variables来定义要在.yml中使用的变量,例如:

Secret variables

然后您可以按如下方式使用它:

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);
}

答案 1 :(得分:2)

通过在属性页面上将以下代码添加到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