2016-09-13 6 views
2

Ich habe zwei Jenkins Jobs, die unsere Funktionstests ausführen. Ein Job ist für jedes Mal, wenn etwas zur Code-Überprüfung eingereicht wird und der andere Job immer dann ausgeführt wird, wenn etwas zur Beherrschung gedrückt wird.Können Sie Umgebungsvariablen an xcodebuild übergeben?

Da es sich um Funktionstests handelt, testen sie ganze Abläufe der Anwendung, die letztendlich den Benutzerstatus ändern. Das Problem, das wir haben, ist, dass jeder Job das gleiche Konto verwendet. Wenn also zwei Jenkins-Jobs parallel ausgeführt werden, ändern sie dasselbe Konto, wodurch sie in einen unerwarteten Zustand versetzt werden und den Test nicht bestehen.

Mein Plan war, JENKINS 'BUILD_NUMBER-Umgebungsvariable zu verwenden, und indem ich ein bisschen Artmimetic dazu verwendete, konnte ich eine garantierte eindeutige Nummer für den Job haben. Diese eindeutige Nummer könnte dann in xcodebuild als Umgebungsvariable übergeben werden, und die Tests könnten diese Nummer verwenden, um sicherzustellen, dass jeder Jenkins an einem eindeutigen Account arbeitet.

Das Problem ist, dass ich keine Möglichkeit finden kann, Umgebungsvariablen an xcodebuild zu übergeben. Ich weiß, dass es möglich ist, benutzerdefinierte Build-Einstellungen über xcodebuild (oder xcargs, wenn Sie Fastlane verwenden) zu übergeben, aber diese Werte scheinen nicht als Umgebungsvariablen zugänglich zu sein. Sie sind für den Präprozessor zugänglich und Sie können damit den Wert in Ihre Info.plist exportieren und von dort lesen. Aber dann hast du diese Werte in deine Binärdatei übertragen und sie kann nicht geändert werden, es sei denn, du hast sie neu erstellt, was nicht ideal ist. Auch zu diesem Zeitpunkt könnte ich Jenkins einfach in eine Datei auf der Festplatte schreiben lassen und die Tests daraus lesen lassen. Es ist im Wesentlichen die gleiche Funktionalität und erspart mir, Build-Einstellungen übergeben zu müssen.

Antwort

1

Ich erinnere mich so etwas wie GCC_PREPROCESSOR_DEFINITIONS mit meinem eigenen var

ich die Zitate entkommen Shell musste passieren. Ich habe es schließlich in meine Fastlane-Build-Datei geschrieben.

in Ruby sah es wie folgt aus:

tmp_other_flags = { 
    GCC_PREPROCESSOR_DEFINITIONS: '"DISABLE_PUSH_NOTIFICATIONS=1"', 
    TARGETED_DEVICE_FAMILY: '1', 
    DEBUG: '1' 
} 
other_flags = tmp_other_flags.map do |k, v| 
    "#{k.to_s.shellescape}=#{v.shellescape}" 
end.join ' ' 
puts "___ Custom Flags also know as xcargs:" 
puts other_flags 

gym(
    clean: true, 
    silent: false, 
    project: proj_xcodeproj_file, 
    archive_path: "build-ios-xcarchive", 
    destination: 'generic/platform=iOS', 
    use_legacy_build_api: true, 
    output_directory: 'build-ios', 
    output_name: "MyApp.ipa", 
    export_method: 'ad-hoc', 
    codesigning_identity: 'iPhone Distribution: company (12345)', 
    provisioning_profile_path: './dl_profile_com.company.myapp.iphone.prod_ad_hoc.mobileprovision', 
    scheme: 'MyApp', 
    configuration: 'Debug', 
    xcargs: other_flags 
) 

es endete in der Schale so etwas wie dies immer genannt:

set -o pipefail && xcodebuild -scheme 'MyApp' -project 'platforms/ios/MyApp.xcodeproj' -configuration 'Debug' -destination 'generic/platform=iOS' -archivePath 'build-ios-xcarchive.xcarchive' GCC_PREPROCESSOR_DEFINITIONS=\"DISABLE_PUSH_NOTIFICATIONS\=1\" TARGETED_DEVICE_FAMILY=1 DEBUG=1 clean archive CODE_SIGN_IDENTITY='iPhone Distribution: My Company (Blah)' | tee '/Users/andxyz/Library/Logs/gym/MyApp-MyApp.log' | xcpretty 

xcodebuild - how to define preprocessor macro?

Also, vielleicht könnten Sie ziehen in Ihrem eigene Umgebungsvariable mit Rubin innerhalb von Fastlane.indem Sie Ihre var in den GCC_PREPROCESSOR_DEFINITIONS Abschnitt

Rubin die Umwelt gelangen können, zum Beispiel:

ENV.fetch('TERM_PROGRAM') #returns "iTerm.app" on my machine 

so folgt zusammen mit oben:

tmp_other_flags = { 
    GCC_PREPROCESSOR_DEFINITIONS: "MY_VARIABLE=#{ENV.fetch('MY_VARIABLE')}" , 
    TARGETED_DEVICE_FAMILY: '1', 
    DEBUG: '1' 
} 

HTH

+1

Wir verwenden etwas Ähnliches in unserem Fastfile 'Fitness-Studio ( Schema: Optionen [: Schema], Konfiguration: Optionen [: config], use_legacy_build_api: Optionen [: ad_hoc], sauber: true, xcargs: " '$ {} inherited GIT_BRANCH = # {Zweig}' GCC_PREPROCESSOR_DEFINITIONS =" ) ' Soweit mit' NSProcessInfo' zugegriffen Laufzeitvariablen ich war dort hätte schwören können, Ein Weg, aber ich kann es nicht finden – tapi

+0

Dies ist der Mechanismus, auf den ich Bezug nahm. "Die einzige Fähigkeit, die ich gefunden habe, besteht darin, eine benutzerdefinierte Build-Einstellung zu übergeben, die Sie dann an die Info.plist ausgeben und die Informationen von dort abrufen können". Ich habe den xcargs-Parameter auch in unserer Fastfile verwendet, aber ich konnte sowieso nicht finden, dass das, was ich an xcargs weitergegeben habe, eine Umgebungsvariable war, nicht etwas, auf das nur der Präprozessor Makro zugreifen konnte. –

1

Via @alisoftware, Sie können xcargs verwenden, um weitere Variablen zu übergeben in:

gym(
    scheme: scheme, 
    xcargs: { 
    :PROVISIONING_PROFILE => 'profile-uuid', 
    :PROVISIONING_PROFILE_SPECIFIER => 'match AppStore com.bigco.App' 
    }, 
    codesigning_identity: "iPhone Distribution: BigCo, Inc.()", 
) 

gibt diese während des Build:

+---------------------+-------------------------------------------------------------------------------------------------+ 
|            Summary for gym 2.53.1             | 
+---------------------+-------------------------------------------------------------------------------------------------+ 
| scheme    | Bespoke-iOS                      | 
| xcargs    | PROVISIONING_PROFILE=profile-uuid PROVISIONING_PROFILE_SPECIFIER=match\ AppStore\ com.bigco.App | 
… 
Verwandte Themen