Question [IC] PowerShell et TeamCity

Plus d'informations
il y a 5 ans 3 mois #20146 par Richard Lazaro
Bonjour,

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.

Plus d'informations
il y a 5 ans 3 mois #20152 par Laurent Dardenne
Richard Lazaro écrit:

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

Je ne connais pas ce produit, mais si tu regardes les chemins 32/64 de l'exécutable, ils sont identiques.
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) &gt;$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.

Plus d'informations
il y a 5 ans 3 mois #20161 par Richard Lazaro
Laurent Dardenne écrit:

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 :D
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) &gt;$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.

Plus d'informations
il y a 5 ans 3 mois #20164 par Laurent Dardenne
Richard Lazaro écrit:

Là tu m'as un peu perdu, comment tu fais pour viser un env particulier ?

Je lance une tâche PSake avec la derniére version, puis j'exécute un autre process PS en V2 :
[code:1]
if ($PSVersion -ge \&quot;3.0\&quot;«»)
{
Invoke-Expression @\&quot;
Powershell -version 2.0 -noprofile -Command {.\&quot;`$env:«»PsIonicProfile\Profile_DevCodePlex.Ps1\&quot;;IPMO Psake; Set-Location $PsIonicTools; Invoke-Psake .\Common.ps1 -parameters @{\&quot;Config\&quot;=\&quot;$($PsCmdlet.ParameterSetName)\&quot;} -nologo}
\&quot;@
}
[/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:

Le side by side n'est pas géré avec le paramètre -version de powershell.exe ?

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.
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:

l'AST de la V4 rajoute des infos en plus

Oui , certaines classes simplifient des traitements qui sont verbeux en v3.
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.

Plus d'informations
il y a 5 ans 2 mois #20302 par Laurent Dardenne
Je viens de trouver ce document 'Etude de l'utilisation de l'integration continue en entreprise' qui peut être utile à ceux/celles qui se demandent ce qu'est l'intégration continue (IC, CI en anglais).<br><br>Message édité par: Laurent Dardenne, à: 24/06/15 14:20

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 5 ans 2 mois #20456 par Laurent Dardenne
Pour info :
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.

Temps de génération de la page : 0.480 secondes
Propulsé par Kunena