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中使用的变量,例如:

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);
}
另一答案

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

gitlab-ci-runner安装

Gitlab CI持续集成 - GitLab Runner 安装与注册

如何让 gitlab-runner 从指定文件中读取而不是 .gitlab-ci.yml?

更改 Gitlab CI Runner 用户