Question
[IC] PowerShell et TeamCity
- Richard Lazaro
- Auteur du sujet
- Hors Ligne
- Membre platinium
-
- Messages : 530
- Remerciements reçus 0
Suite a une discussion avec Laurent, je me suis remémoré que TeamCity propose le lancement des 4 versions de PowerShell.
Sauf que lorsque le WMF4 est installé, il est uniquement possible de lancer powershell en version 2.0 et 4.0.
J'ai donc voulu faire un test pour être sur du comportement de TeamCity :
Puis le script exécuté pour chaque step :
[code:1]
Write-Host \"%teamcity.build.step.name%\"
Write-Host \" $([intPtr]::«»Size)\"
Write-Host \" $($Host.Version.Major)\"
[/code:1]
et voici le log résultant :
Build 'PowerShellVersion :: Build' #2
Started 'Tue Jun 16 08:39:34 UTC 2015' on 'SRV-TCT-01' by 'Richard LAZARO'
Finished 'Tue Jun 16 08:40:34 UTC 2015' with status 'NORMAL Success'
TeamCity URL teamcity.think-ms.net/viewLog.html?build...erShellVersion_Build
TeamCity server version is 9.0.4 (build 32407)
[08:39:31]i: TeamCity server version is 9.0.4 (build 32407)
[08:39:32]W: bt2 (1m:02s)
[08:39:32] : Skip checking for changes - there are no VCS roots defined
[08:39:34]i: Agent time zone: UTC
[08:39:33]i: Agent is running under JRE: 1.7.0_72-b14
[08:39:33] : Clearing temporary directory: C:\TeamCity\buildAgent\temp\buildTmp
[08:39:33] : Publishing internal artifacts (5s)
[08:39:38] : [Publishing internal artifacts] Sending using ArtifactsCachePublisher
[08:39:38] : [Publishing internal artifacts] Sending using WebPublisher
[08:39:33] : Checkout directory: C:\TeamCity\buildAgent\work\3de96e708f2408e
[08:39:33] : Build preparation done
[08:39:33]W: Parameter \"teamcity.build.step.name\" is undefined.
[08:39:33] : Step 1/8: PS_x86_1.0 (Powershell) (16s)
[08:39:34]i: [Step 1/8] ##teamcity[buildStatisticValue key='buildStageDuration:firstStepPreparation' value='313.0']
[08:39:34]i: [Step 1/8] ##teamcity[buildStatisticValue key='buildStageDuration:buildStepRUNNER_3' value='0.0']
[08:39:34] : [Step 1/8] PowerShell Executable: C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
[08:39:34] : [Step 1/8] Working directory: C:\TeamCity\buildAgent\work\3de96e708f2408e
[08:39:34] : [Step 1/8] PowerShell arguments: [-Version, 1.0, -NonInteractive, -ExecutionPolicy, ByPass, -File, C:\TeamCity\buildAgent\temp\buildTmp\powershell2591119267092999102.ps1]
[08:39:47] : [Step 1/8] PS_x86_1.0
[08:39:47] : [Step 1/8] 4
[08:39:47] : [Step 1/8] 2
[08:39:47] : [Step 1/8] Process exited with code 0
[08:39:50]i: [Step 1/8] ##teamcity[buildStatisticValue key='buildStageDuration:buildStepRUNNER_3' value='16493.0']
[08:39:50] : Step 2/8: PS_x86_2.0 (Powershell) (5s)
[08:39:50]i: [Step 2/8] ##teamcity[buildStatisticValue key='buildStageDuration:buildStepRUNNER_4' value='0.0']
[08:39:50] : [Step 2/8] PowerShell Executable: C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
[08:39:50] : [Step 2/8] Working directory: C:\TeamCity\buildAgent\work\3de96e708f2408e
[08:39:50] : [Step 2/8] PowerShell arguments: [-Version, 2.0, -NonInteractive, -ExecutionPolicy, ByPass, -File, C:\TeamCity\buildAgent\temp\buildTmp\powershell4912506704432412250.ps1]
[08:39:55] : [Step 2/8] PS_x86_2.0
[08:39:55] : [Step 2/8] 4
[08:39:55] : [Step 2/8] 2
[08:39:55] : [Step 2/8] Process exited with code 0
[08:39:55]i: [Step 2/8] ##teamcity[buildStatisticValue key='buildStageDuration:buildStepRUNNER_4' value='5395.0']
[08:39:55] : Step 3/8: PS_x86_3.0 (Powershell) (12s)
[08:39:56]i: [Step 3/8] ##teamcity[buildStatisticValue key='buildStageDuration:buildStepRUNNER_5' value='0.0']
[08:39:56] : [Step 3/8] PowerShell Executable: C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
[08:39:56] : [Step 3/8] Working directory: C:\TeamCity\buildAgent\work\3de96e708f2408e
[08:39:56] : [Step 3/8] PowerShell arguments: [-Version, 3.0, -NonInteractive, -ExecutionPolicy, ByPass, -File, C:\TeamCity\buildAgent\temp\buildTmp\powershell8344636982632356276.ps1]
[08:40:07] : [Step 3/8] PS_x86_3.0
[08:40:08] : [Step 3/8] 4
[08:40:08] : [Step 3/8] 4
[08:40:08] : [Step 3/8] Process exited with code 0
[08:40:08]i: [Step 3/8] ##teamcity[buildStatisticValue key='buildStageDuration:buildStepRUNNER_5' value='12411.0']
[08:40:08] : Step 4/8: PS_x86_4.0 (Powershell) (1s)
[08:40:08]i: [Step 4/8] ##teamcity[buildStatisticValue key='buildStageDuration:buildStepRUNNER_6' value='0.0']
[08:40:08] : [Step 4/8] PowerShell Executable: C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
[08:40:08] : [Step 4/8] Working directory: C:\TeamCity\buildAgent\work\3de96e708f2408e
[08:40:08] : [Step 4/8] PowerShell arguments: [-Version, 4.0, -NonInteractive, -ExecutionPolicy, ByPass, -File, C:\TeamCity\buildAgent\temp\buildTmp\powershell6547249681521629524.ps1]
[08:40:09] : [Step 4/8] PS_x86_4.0
[08:40:09] : [Step 4/8] 4
[08:40:09] : [Step 4/8] 4
[08:40:09] : [Step 4/8] Process exited with code 0
[08:40:09]i: [Step 4/8] ##teamcity[buildStatisticValue key='buildStageDuration:buildStepRUNNER_6' value='1123.0']
[08:40:09] : Step 5/8: PS_x64_1.0 (Powershell) (11s)
[08:40:09]i: [Step 5/8] ##teamcity[buildStatisticValue key='buildStageDuration:buildStepRUNNER_7' value='0.0']
[08:40:09] : [Step 5/8] PowerShell Executable: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
[08:40:09] : [Step 5/8] Working directory: C:\TeamCity\buildAgent\work\3de96e708f2408e
[08:40:09] : [Step 5/8] PowerShell arguments: [-Version, 1.0, -NonInteractive, -ExecutionPolicy, ByPass, -File, C:\TeamCity\buildAgent\temp\buildTmp\powershell2842061699380443305.ps1]
[08:40:19] : [Step 5/8] PS_x64_1.0
[08:40:20] : [Step 5/8] 8
[08:40:20] : [Step 5/8] 2
[08:40:20] : [Step 5/8] Process exited with code 0
[08:40:20]i: [Step 5/8] ##teamcity[buildStatisticValue key='buildStageDuration:buildStepRUNNER_7' value='11029.0']
[08:40:20] : Step 6/8: PS_x64_2.0 (Powershell) (8s)
[08:40:20]i: [Step 6/8] ##teamcity[buildStatisticValue key='buildStageDuration:buildStepRUNNER_8' value='0.0']
[08:40:20] : [Step 6/8] PowerShell Executable: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
[08:40:20] : [Step 6/8] Working directory: C:\TeamCity\buildAgent\work\3de96e708f2408e
[08:40:20] : [Step 6/8] PowerShell arguments: [-Version, 2.0, -NonInteractive, -ExecutionPolicy, ByPass, -File, C:\TeamCity\buildAgent\temp\buildTmp\powershell1423221366971157007.ps1]
[08:40:28] : [Step 6/8] PS_x64_2.0
[08:40:28] : [Step 6/8] 8
[08:40:28] : [Step 6/8] 2
[08:40:28] : [Step 6/8] Process exited with code 0
[08:40:28]i: [Step 6/8] ##teamcity[buildStatisticValue key='buildStageDuration:buildStepRUNNER_8' value='8387.0']
[08:40:28] : Step 7/8: PS_x64_3.0 (Powershell) (2s)
[08:40:28]i: [Step 7/8] ##teamcity[buildStatisticValue key='buildStageDuration:buildStepRUNNER_9' value='0.0']
[08:40:29] : [Step 7/8] PowerShell Executable: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
[08:40:29] : [Step 7/8] Working directory: C:\TeamCity\buildAgent\work\3de96e708f2408e
[08:40:29] : [Step 7/8] PowerShell arguments: [-Version, 3.0, -NonInteractive, -ExecutionPolicy, ByPass, -File, C:\TeamCity\buildAgent\temp\buildTmp\powershell2155760985137193721.ps1]
[08:40:31] : [Step 7/8] PS_x64_3.0
[08:40:31] : [Step 7/8] 8
[08:40:31] : [Step 7/8] 4
[08:40:31] : [Step 7/8] Process exited with code 0
[08:40:31]i: [Step 7/8] ##teamcity[buildStatisticValue key='buildStageDuration:buildStepRUNNER_9' value='2935.0']
[08:40:31] : Step 8/8: PS_x64_4.0 (Powershell)
[08:40:31]i: [Step 8/8] ##teamcity[buildStatisticValue key='buildStageDuration:buildStepRUNNER_10' value='0.0']
[08:40:31] : [Step 8/8] PowerShell Executable: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
[08:40:31] : [Step 8/8] Working directory: C:\TeamCity\buildAgent\work\3de96e708f2408e
[08:40:31] : [Step 8/8] PowerShell arguments: [-Version, 4.0, -NonInteractive, -ExecutionPolicy, ByPass, -File, C:\TeamCity\buildAgent\temp\buildTmp\powershell7111872710391874819.ps1]
[08:40:32] : [Step 8/8] PS_x64_4.0
[08:40:32] : [Step 8/8] 8
[08:40:32] : [Step 8/8] 4
[08:40:32] : [Step 8/8] Process exited with code 0
[08:40:32]i: [Step 8/8] ##teamcity[buildStatisticValue key='buildStageDuration:buildStepRUNNER_10' value='878.0']
[08:40:32]i: ##teamcity[buildStatisticValue key='buildStageDuration:buildFinishing' value='31.0']
[08:40:32] : Publishing internal artifacts
[08:40:32] : [Publishing internal artifacts] Sending using ArtifactsCachePublisher
[08:40:32] : [Publishing internal artifacts] Sending using WebPublisher
[08:40:32]i: ##teamcity[buildStatisticValue key='buildStageDuration:artifactsPublishing' value='156.0']
[08:40:33] : Build finished
Donc, comportement \"normal\" : Il n'arrive pas a lancer powershell en version 1.0 et 3.0.
Cela veut donc dire que si on veut tester complétement un script Powershell. Il faut au minimum 2 agents (un pour PS 4.0 et 2.0, puis un autre pour PS 3.0) si on oublie le support de PS 1.0
Bien Cordialement,
Richard Lazaro.<br><br>Message édité par: Richard Lazaro, à: 16/06/15 11:15
Think-MS : (Get-Life).Days | %{ Learn-More }
\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6298
- Remerciements reçus 68
Je ne connais pas ce produit, mais si tu regardes les chemins 32/64 de l'exécutable, ils sont identiques.Cela veut donc dire que si on veut tester complétement un script Powershell. Il faut au minimum 2 agents (un pour PS 4.0 et 2.0, puis un autre pour PS 3.0) si on oublie le support de PS 1.0
Pour la notion d'agent je pense qu'il t'en faut deux pour PS v2 et PS v4 et deux machines pour cibler le troisième agent (PS v3) et trois machines pour cibler le quatrième agent (PS v5).
Mais la version free de TeamCity ne propose que 3 agents de build.
Dans mon script de livraison du projet Psionic j'avais codé ceci pour m'affranchir des noms de chemins :
[code:1]
$cp = New-Object System.CodeDom.Compiler.CompilerParameters
#Pointe sur la version adéquate de System.Management.Automation.dll
$cp.ReferencedAssemblies.Add([PSObject].Assembly.Location) >$null
[/code:1]
Je peux donc compiler sur une même machine pour la v2 et la v3 OU la v2 et la v4, pour compiler pour les trois versions j'utilisais deux machines.
Je suppose ce TeamCity pointe sur la bonne version, mais n’intègre pas le side by side pour Powershell.
En passant, si c'est pour ton projet sache que l'AST de la v3 et de la v4 diffère, mais je n'ai pas le détail. Et pour ton projet tu ne devrais tester que la v3/v4, non ?
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Richard Lazaro
- Auteur du sujet
- Hors Ligne
- Membre platinium
-
- Messages : 530
- Remerciements reçus 0
Je ne connais pas ce produit, mais si tu regardes les chemins 32/64 de l'exécutable, ils sont identiques.
Ceci est du au fait de la redirection 64bits. Je pense que TeamCity utilise (par exemple) un process x64 pour lancer powershell x64 ou un process x86 pour lancer powershell x86.
Mais donc pour le process parent, le chemin sera automatiquement C:\Windows\System32
https://koyqiq.dm2301.livefilestore.com/y2ph1DvQ6Avg6AABa9wgC2sLIL5epJV-l38O1LQzu61joxerZFoVYO6y2bZP0Eq1AKAAsNmdo6zsxt4Wy61uVgp90sNfMVT6o61WOekGVgDd9LSw08Z2CRIX2b44G6r_BYobcuTBRWB6b6AE7LQWZrAuRcPdClEJKy2jrg9W2Njz_Y/PowerShellRedirection.png?psid=1
Laurent Dardenne écrit:
Pour la notion d'agent je pense qu'il t'en faut deux pour PS v2 et PS v4 et deux machines pour cibler le troisième agent (PS v3) et trois machines pour cibler le quatrième agent (PS v5).
Mais la version free de TeamCity ne propose que 3 agents de build.
Donc une install TC complète pour gérer toutes les versions ... ça pique

Au pire, faut créer une interface (API REST) pour gérer plusieurs TC avec une license free XD
Laurent Dardenne écrit:
Dans mon script de livraison du projet Psionic j'avais codé ceci pour m'affranchir des noms de chemins :
[code:1]
$cp = New-Object System.CodeDom.Compiler.CompilerParameters
#Pointe sur la version adéquate de System.Management.Automation.dll
$cp.ReferencedAssemblies.Add([PSObject].Assembly.Location) >$null
[/code:1]
Je peux donc compiler sur une même machine pour la v2 et la v3 OU la v2 et la v4, pour compiler pour les trois versions j'utilisais deux machines.
[/code]
Là tu m'as un peu perdu, comment tu fais pour viser un env particulier ?
Laurent Dardenne écrit:
Je suppose ce TeamCity pointe sur la bonne version, mais n’intègre pas le side by side pour Powershell.
Le side by side n'est pas géré avec le paramètre -version de powershell.exe ? J'ai loupé un épisode ?
Laurent Dardenne écrit:
En passant, si c'est pour ton projet sache que l'AST de la v3 et de la v4 diffère, mais je n'ai pas le détail. Et pour ton projet tu ne devrais tester que la v3/v4, non ?
l'AST de la V4 rajoute des infos en plus il me semble pas qu'il y est de Breaking Change (mais je peux me planter totalement, j'aborde a peine le sujet)<br><br>Message édité par: Richard Lazaro, à: 16/06/15 17:10
Think-MS : (Get-Life).Days | %{ Learn-More }
\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6298
- Remerciements reçus 68
Je lance une tâche PSake avec la derniére version, puis j'exécute un autre process PS en V2 :Là tu m'as un peu perdu, comment tu fais pour viser un env particulier ?
[code:1]
if ($PSVersion -ge \"3.0\"«»)
{
Invoke-Expression @\"
Powershell -version 2.0 -noprofile -Command {.\"`$env:«»PsIonicProfile\Profile_DevCodePlex.Ps1\";IPMO Psake; Set-Location $PsIonicTools; Invoke-Psake .\Common.ps1 -parameters @{\"Config\"=\"$($PsCmdlet.ParameterSetName)\"} -nologo}
\"@
}
[/code:1]
Le principe de PSake est similaire à MSBuild, qui est plus puissance mais utilise du XML. PSake c'est du Powershell.
Richard Lazaro écrit:
Si, excuse moi pour la confusion, mais la dernière version + la v2, tu ne peux pas en avoir plus sur une même machine.Le side by side n'est pas géré avec le paramètre -version de powershell.exe ?
Avec VS tu peux cibler + versions du framework C# sur une seule machine.
Je n'ai pas recherché la cause, mais il me semble que certaines DLL ont un numéro de version identiques, le chemin du process est unique et qq clés de registre uniques.
Richard Lazaro écrit:
Oui , certaines classes simplifient des traitements qui sont verbeux en v3.l'AST de la V4 rajoute des infos en plus
Mais je n'ai pas recherché plus que ça les différences, ni approfondis leur usage.
Je viens d'installer la version free, je vais étudier ça doucement. Le service occupe 400mg de RAM tout de même

Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6298
- Remerciements reçus 68
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6298
- Remerciements reçus 68
Community Build Server
[edit]
github.com/psake/psake-contrib/blob/develop/teamcity.psm1
Message édité par: Laurent Dardenne, à: 16/07/15 12:06
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Discussions générales
- [IC] PowerShell et TeamCity