2012-04-04 7 views
21

Sto cercando un modo per collegare determinati parametri di build a un trigger programmato.Opzione di attivazione per impostare parametri di costruzione specifici?

L'idea è che stiamo continuamente costruendo versioni di debug dei nostri prodotti. La nostra build notturna deve essere una build di rilascio, però. Le configurazioni di build per la maggior parte dei nostri progetti sono assolutamente le stesse. Ha già un parametro di configurazione, già. Quindi tutto ciò di cui ho bisogno è un trigger che consente di specificare un override per un singolo parametro di build. Ciò ridurrebbe della metà le configurazioni di build da mantenere.

C'è un modo per raggiungere questo obiettivo?

risposta

5

L'approccio che uso è quello di creare una build "Distribuire :: :: Dev D1 eseguire tutti i test di integrazione". Quindi creo un trigger di build su ogni build del servizio di integrazione.

Creo un parametro denominato "env: OctopusEnvironment" per il build del servizio di integrazione. Imposta il valore da vuoto. Mi piace usare pronta e visualizzazione:

select display='prompt' label='OctopusEnvironment' data_13='Production' data_12='CI' data_11='Local - Hassan' data_10='Local - Mustafa' description='OctopusEnvironment' data_02='Test T1' data_01='Dev D1' data_04='Local - Taliesin' data_03='Continuous Deployment CI 1' data_06='Local - Paulius' data_05='Local - Ravi' data_08='Local - Venkata' data_07='Local - Marko' data_09='Local - Ivan' 

In ogni generazione servizio di integrazione aggiungo questo passaggio PowerShell:

$octopusEnvironment = ($env:OctopusEnvironment).Trim() 

Write-Host "Octopus environment = '$octopusEnvironment'" 
if ($octopusEnvironment.Length -lt 1) { 
    Write-Host "Auto detecting octopus environment" 
    $trigger = '%teamcity.build.triggeredBy%' -split '::' 
    if ($trigger.Length -gt 2){ 
     $environment = $trigger[1].Trim() 
     Write-Host "##teamcity[setParameter name='env.OctopusEnvironment' value='$environment']" 
    } 
} 

Così ora posso eseguire il test di integrazione mediante un trigger e quando l'eseguo direttamente mi chiederà su quale ambiente eseguire il test di integrazione.

+4

Nice little suff PowerShell. Ma questo non può essere una scusa per i ragazzi JetBrains per non avere questa funzione in TeamCity sé. –

2

Sono rimasto bloccato con lo stesso problema e ho votato per il problema menzionato da Evgeny. Una soluzione che pensavamo, come menzionato in sergiussergius, consisteva nell'aggiungere un ultimo passaggio nella sequenza build-steps per attivare manualmente la successiva configurazione di build passando parametri di custom-build utilizzando l'API REST. Ma in questo caso, stiamo perdendo le informazioni sulla catena di costruzione. Utilizzando TeamCity 9.x, provando alcune cose sull'API REST, ho potuto implementare una soluzione che consente di recuperare la build di innesco (antenato) ei suoi parametri dalla build (secondaria) innescata. La prima cosa che facciamo è sempre la build corrente utilizzando le variabili di ambiente stabiliti dal TeamCity:

https://<host>/httpAuth/app/rest/builds/number:<env.BUILD_NUMBER>,buildType:(name:<env.TEAMCITY_BUILDCONF_NAME>,project:<env.TEAMCITY_PROJECT_NAME>) 

Nella risposta l'API REST, abbiamo un /build/innescato tag che contiene le informazioni sul grilletto . Sembra che questo

<triggered type="unknown" details="##triggeredByBuildType='<triggering-build-configuration-internalId>' triggeredByBuild='<triggering-build-number>'" date="20160105T190642+0700"/> 

Gli sguardi come btxxx per noi. Da essa, si può accedere al trigger-build (antenato) utilizzando la seguente richiesta per l'API REST:

https://<host>/httpAuth/app/rest/builds/number:<triggering-build-number>'4,buildType:(internalId:<triggering-build-configuration-internalId>1,project:name:<env.TEAMCITY_PROJECT_NAME>) 

dalla risposta, siamo in grado di ottenere i valori dei parametri di l'antenato-costruzione, e impostarlo nella corrente costruire utilizzando:

echo "##teamcity[setParameter name='env.ENV_AAA' value='aaaaaaaaaa']") 

Note:

  • questo post riferimento versione TeamCity 7.x. L'ho fatto usando TeamCity versione 9.X, e non ho potuto provare con una versione precedente. Non so se le chiamate API REST menzionate nel mio post siano simili nelle versioni precedenti.
  • In questa soluzione, l'accumulo di configurazione degli antenati (colui che innescano la costruzione) e l'accumulo di configurazione del bambino (quello innescato) sono nello stesso progetto. Non ho fatto il test utilizzando build-configurazioni in 2 diversi progetti: mi aspetterei il tag "trigger" per fornire informazioni sul progetto degli antenati. Sarebbe bello se qualcuno potesse fare il test.

Spero che questa soluzione può aiutare!

Problemi correlati