Question [Tutoriel] Usage de Psake

Plus d'informations
il y a 10 ans 2 semaines #17282 par Laurent Dardenne
Un tutoriel sur Psake , outil de build basé sur des tâches.

Un addin pour VSCode.

Créer le graphe des tâches.
Message édité par: Laurent Dardenne, à: 3/04/14 20:24

Message édité par: Laurent Dardenne, à: 25/08/16 20:45<br><br>Message édité par: Laurent Dardenne, à: 6/09/16 12:52

Tutoriels PowerShell

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

Plus d'informations
il y a 10 ans 2 semaines #17318 par Laurent Dardenne
Une fonction de configuration utilisable avec Psake:
[code:1]
function New-ProjectVariable {
&lt;#
.SYNOPSIS
Créer une variable, de type hashtable, contenant des informations spécifiques à un projet.

.DESCRIPTION
Cette fonction crée une variable, de type hashtable, contenant des informations
relatives à un projet, parmi ces informations certaines sont spécifiques à un
poste de travail, par exemple le nom du répertoire de travail local de Subversion.
.
Le nom de cette ou ces variables seront identiques dans les divers scripts d'un projet, tout
en étant configurées différemment sur chaque poste des membres de l'équipe projet.
.
L'objet créé dispose d'une méthode nommée NewVariables(), celle-ci crée des
variables, de type constantes, d'après les clés de la hashtable.
Ces variables facileteront les substitutions dans les chaînes de caractères.

.EXAMPLE
$ProjetX=New-ProjectVariable 'ProjetX' 'C:\Temp\ProjectX' 'projectx.svn.codeplex.com/svn'
$ProjetX|fl
# Url : projectx.svn.codeplex.com/svn
# Svn : C:\Temp\ProjectX\ProjetX
# ProjectName : ProjetX
# Trunk : C:\Temp\ProjectX\ProjetX
.
Cette exemple crée la variable $ProjetX contenant les informations spécifique à un projet.
.EXAMPLE
$ProjectName='PsIonic'
#Spécifique au poste de développement
$SvnPathRepository='G:\PS'

$Paths=@{
Bin='$($Properties.Trunk)\Bin';
#Spécifique au poste de développement, n'est pas versionné.
Livraison='C:\Temp\$ProjectName';
Tests='$($Properties.Trunk)\Tests';
Tools='$($Properties.Trunk)\Tools';
Help='$($Properties.Trunk)\Documentation\Helps';
Setup='$($Properties.Trunk)\Setup';
#Spécifique au poste de développement
Logs='C:\Temp\Logs\$ProjectName'
}

$PsIonic=New-ProjectVariable $ProjectName $SvnPathRepository 'psionic.svn.codeplex.com/svn' $Paths

$PsIonic.NewVariables()
Get-ChilItem Variable:«»PsIonic*
.
Cet exemple crée la variable $Psionic contenant les différents répertoires
spécifique au projet.
.
On retarde la substitution dans le contenu des clés de la variable $Paths.
.
L'appel à la méthode NewVariables() créés des variables, de type constantes,
d'après les clés de la hashtable $PsIonic.
.
Pour $PsIonic.Tools la méthode crée la variable $PsIonicTools
#&gt;
param (
#Nom du projet
[Parameter(Position=0, Mandatory=$true)]
[ValidateNotNullOrEmpty()]
[string]$ProjectName,

#Nom du répertoire de travail du projet utilisé par Subversion.
[Parameter(Position=1, Mandatory=$true)]
[ValidateNotNullOrEmpty()]
[string]$SvnPath,

#URL du server Subversion hébergeant le projet
[Parameter(Position=2, Mandatory=$true)]
[ValidateNotNullOrEmpty()]
[string]$URlSvnServer,

#Hashtable optionnelle portant des noms de variable à créer dans la portée
#de l'appelant.
#.
#Les valeurs des clés peuvent contenir des références à la variable interne
#$Properties, de type hashtable, qui déclare les clés suivantes :
# ProjectName : Nom du projet.
# Url : Url du repository Subversion.
# Svn : Répertoire de la copie de travail (checkout).
# Trunk : Emplacement du répertoire racine dans la copie de travail.
# Son contenu peut être identique à la clé Svn.
[Parameter(Position=3, Mandatory=$false)]
[ValidateNotNullOrEmpty()]
[System.Collections.IDictionary] $ProjectParameters,

#Portée dans laquelle créer la variable. Par défaut 1, celle de l'appelant.
[Parameter(Mandatory=$false)]
[int]$Scope=1,

#Modifie le nom du répertoire racine du projet.
#La clé nommée 'Trunk' pointera vers le répertoire \&quot;$SvnPath\$ProjectName\trunk\&quot;,
#Sinon, par défaut, elle pointera vers le répertoire \&quot;$SvnPath\$ProjectName\&quot;
[Switch]$TrunkDirectory
)#param

if ($TrunkDirectory)
{$Trunk=\&quot;$SvnPath\$ProjectName\trunk\&quot;}
else
{$Trunk=\&quot;$SvnPath\$ProjectName\&quot;}

# Hashtable 'primaire'
# Ces clés peuvent être référencées dans le code de l'appelant
$Properties=@{
ProjectName=$ProjectName;
Url=$URlSvnServer;
Svn=\&quot;$SvnPath\$ProjectName\&quot;;
Trunk=$Trunk;
}

# Ajoute les clés de la hashtable additionnelle
if ($PSBoundParameters.ContainsKey('ProjectParameters'))
{
#Construit les noms de chemins
$New=@{}
$ProjectParameters.GetEnumerator() |
Foreach {
#V3 Bug
#$_.Value=$ExecutionContext.InvokeCommand.ExpandString(($_.Value))
#une chaîne de type '$($Properties.Trunk)\Bin' -&gt; Null Reference exception
Write-debug \&quot;Before $($_.value)\&quot;
$New.\&quot;$($_.Key)\&quot;=iex \&quot;`\&quot;$($_.value)`\&quot;\&quot;
Write-debug (\&quot;After \&quot; + $New.\&quot;$($_.Key)\&quot;«»)
}
$Properties +=$New
}

$method=[scriptblock]::Create(@\&quot;
`$this.Psobject.Properties |
Foreach-Object {
New-Variable \&quot;`$(`$this.ProjectName)`$(`$_.Name)\&quot; -Value `$_.Value -Option Constant -Scope $Scope
}
\&quot;@)

# La méthode NewVariable crée, à partir de la hashtable d'un projet,
# une variable constante par clé et ce dans le scope indiqué.
# Le nom de la variable est préfixée par le nom du projet
# on évite les collisions de noms et facilite la saisie lors de la substitution de chaîne
New-Object PSObject -Property $Properties|
Add-Member -Passthru -Member ScriptMethod -Name NewVariables -Value $Method
} #New-ProjectVariable

[/code:1]
Un exemple de tâche de validation de la syntaxe de scripts/modules avant leur livraison:
[code:1]
#https://psionic.codeplex.com/SourceControl/latest#trunk/Tools/Test-PSScript.Ps1
Task TestPSSyntax {
.\&quot;$PsIonicTools\Test-PSScript.ps1\&quot;

$Result=@(\&quot;$PsIonicLivraison\Log4Posh\Log4Posh.psd1\&quot;,
\&quot;$PsIonicLivraison\Log4Posh\Log4Posh.psm1\&quot;,
\&quot;$PsIonicLivraison\PsIonic\psionic.psd1\&quot;,
\&quot;$PsIonicLivraison\PsIonic\psionic.psm1\&quot;|
Test-PSScript -IncludeSummaryReport
)
$Result
if ($Result.Count -gt 0)
{Throw \&quot;Corriger les erreurs de syntaxe.\&quot;}
} #TestPSSyntax
[/code:1]

La pièce jointe New_ProjectVariable.ps1 est absente ou indisponible

<br><br>Message édité par: Laurent Dardenne, à: 7/04/14 21:06

Tutoriels PowerShell

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

Plus d'informations
il y a 7 ans 7 mois #22185 par Laurent Dardenne
Une refonte de la fonction à l'aide de Plaster (Projet Powershell open source).

Voir le template utilisé.

Le contenu est un peu dense, la relecture s'en ressent :laugh:

La dernière build est disponible ici , sauf en cas d'échec bien évidement.<br><br>Message édité par: Laurent Dardenne, à: 23/08/16 20:25

Tutoriels PowerShell

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

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