2010-02-05 5 views
7

Je voudrais injecter des paramètres de ligne de commande dans mon script build psake comme:. \ build.ps1 Déployer environnement = « développement »arguments de ligne de commande Injecter dans psake

Mais psake traitera tous les arguments comme une tâche et répondra "la tâche n'existe pas"

Est-il possible d'injecter des arguments de ligne de commande dans psake?

build.ps1 --> 
Import-Module '.\psake.psm1' 
Invoke-psake '.\tasks.ps1' $args 
Remove-Module psake 
+1

Vous aurez peut-être plus de chance d'obtenir une réponse à cette question sur http://groups.google.com/group/psake-users ou sur http://code.google.com/p/psake/ –

+0

Ajout d'une demande de fonctionnalité au groupe de discussion - http://groups.google.com/group/psake-users/browse_thread/thread/cf59508789ab58eb –

Répondre

10

Le latest release of psake maintenant supports passing parameters à Invoke-psake, par exemple,

Invoke-psake .\parameters.ps1 -parameters @{"p1"="v1";"p2"="v2"} 

Cette fonctionnalité vient d'être ajoutée. :)

+0

Merci pour les commentaires, il est une meilleure option qu'une variable Gobal – orjan

+0

PS au moment de l'écriture, cette nouvelle feature ne fait pas partie d'une 'release' officielle: vous devrez obtenir la dernière source depuis le tronc (ou quel que soit le tronc appelé dans GIT) –

0

Je ne suis pas expert, mais je ne pense pas qu'il est possible de passer des arguments à Invoke-Psake. En regardant sur la dernière source pour Psake les params pour la fonction Invoke-Psake sont:

param(
    [Parameter(Position=0,Mandatory=0)] 
    [string]$buildFile = 'default.ps1', 
    [Parameter(Position=1,Mandatory=0)] 
    [string[]]$taskList = @(), 
    [Parameter(Position=2,Mandatory=0)] 
    [string]$framework = '3.5', 
    [Parameter(Position=3,Mandatory=0)] 
    [switch]$docs = $false  
    ) 

Il y a 4 paramètres, votre fichier de construction, une liste de tâches, la version du framework .NET, que ce soit à la sortie docs de votre les tâches. Je suis nouveau et Powershell psake et je suis en train de faire la même chose, j'expérimente avec faire quelque chose comme ça dans mon script pour obtenir la même chose:

properties { 
    $environment = "default" 
} 

task PublishForLive -precondition { $environment = "Live"; return $true; } -depends Publish { 

} 

task PublishForStaging -precondition { $environment = "Staging"; return $true; } -depends Publish { 

} 

task Publish { 
    Write-Host "Building and publishing for $environment environment" 
    #Publish the project... 
} 

ensuite appeler psake avec PublishForLive ou PublishForStaging , celui que j'ai besoin:

powershell -NoExit -ExecutionPolicy Unrestricted -Command "& {Import-Module .\tools\psake\psake.psm1; Invoke-psake .\psake-common.ps1 PublishForLive }" 

Mais cela ne semble pas fonctionner pour moi! La définition de la variable $ environment dans la précondition de la tâche semble n'avoir aucun effet. Toujours essayer de faire fonctionner ...

+0

Essayez de rendre l'affectation de variable d'environnement $ visible en dehors de la portée du script. '$ script: environment =" Live "' –

+0

C'est une condition de concurrence dans votre exemple. Publish sera exécuté avant PublishForStaging. Une autre solution serait d'appeler Publish depuis PublishForStaging, mais vous ne savez pas si c'est possible ou non? – orjan

+0

Cela fonctionne pour moi: tâche PublishStage { environnement $ = « étape » ExecuteTask (« Publier ») } – orjan

1

Une variable globale résoudra mon problème pour l'instant et avec une seule référence à $ global: arg_environent il sera facile de changer si je trouve un meilleur moyen d'injecter les propriétés.

build.ps1

param(
    [Parameter(Position=0,Mandatory=0)] 
    [string]$task, 
    [Parameter(Position=1,Mandatory=0)] 
    [string]$environment = 'dev' 
) 

clear 
$global:arg_environent = $environment 
Import-Module .\psake.psm1 
Invoke-psake tasks.ps1 $task 
Remove-Module psake 

tasks.ps1

properties { 
    $environment = $global:arg_environent 
} 

task default -depends Deploy 

task Deploy { 
    echo "Copy stuff to $environment" 
} 
Questions connexes