2017-12-18 6 views
0

こんにちは、GitlabランナーのセットアップでMSBuildプロセスの一部として環境変数を使用して、CI_PIPELINE_IDとCI_COMMIT_SHAを渡して、インクリメンタルビルドIDでアプリケーションをビルドし、shaをコミットしてバイナリ版。Gitlab CIランナー定義済みマクロMSBuild

マイ.gitlab-ci.ymlは、以下のように構成されています。私は私のC++プロジェクトでは、このような環境変数にアクセスするために行うために

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 

何が必要ですか?次のように次に、あなたがそれを使用することができます

Secret variables

#ifndef CI_COMMIT_SHA 
#define COMMIT_SHA     0 
#else 
#define COMMIT_SHA     CI_COMMIT_SHA 
#endif 

答えて

1

次のコードをプロパティページのC/C++コマンドラインに追加して解決しました。あなたは今、あなたがHow to test if preprocessor symbol is #define'd but has no value?と修正から取られた以下のチェックでCI環境で実行していないときに、これらが空であるかどうかを確認する必要がありますしかし

/D CI_PIPELINE_ID=$(CI_PIPELINE_ID) /D CI_COMMIT_SHA=$(CI_COMMIT_SHA) 

。 (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 
2

あなたは、たとえば、.ymlで使用する変数を定義するSettings --> CD/CD --> 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); 
} 
+0

CI_PIPELINE_IDとCI_COMMIT_SHAは既にhttps://docs.gitlab.com/ce/ci/variables/READMEを事前に定義されています。 html。私の質問は、これをmsbuildで使ってキー値にアクセスすることでコンパイルする方法です。 –

+0

@a_dizzle:modified。 –

+0

コンパイル時にのみ実行時にキー値を取得しようとしていません。 msbuildコマンドの最後に/ D CI_PIPELINE_ID = $(CI_PIPELINE_ID)/ D CI_COMMIT_SHA = $(CI_COMMIT_SHA)を追加してプロジェクトに追加してください。ただし、存在しない場合はこれをしないことをお勧めします。 –

関連する問題