2010-02-05 3 views
7

Я хотел бы, чтобы ввести параметры командной строки в мой psake сценарий сборки, как:. \ build.ps1 Deploy среды = «развитие»командной строки Inject аргументы в psake

Но psake будет рассматривать каждый аргумент как задачи и ответит «задача не существует»

Можно ли вводить аргументы командной строки в psake?

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

Возможно, вам удастся получить ответ на этот вопрос на странице http://groups.google.com/group/psake-users или на http://code.google.com/p/psake/ –

+0

I 'добавлен запрос функции в дискуссионную группу - http://groups.google.com/group/psake-users/browse_thread/thread/cf59508789ab58eb –

ответ

10

latest release of psake Теперь supports passing parameters к Invoke-psake, например,

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

Эта функция только что добавлена. :)

+0

Спасибо за обратную связь, что это лучший вариант, чем Gobal переменная – orjan

+0

PS на момент написания этого нового функция не является частью официальной «версии»: вам нужно будет получить последний источник из туловища (или что-то, что вызывается в GIT) –

0

Я не эксперт, но я не думаю, что можно передать аргументы Invoke-Psake. Глядя на последнюю источник Psake в PARAMS для функции Invoke-Psake являются:

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  
    ) 

Есть 4 параметра, файл сборки, список задач, .NET версии базы, следует ли выводить документы на ваш задания. Я новичок в PowerShell и psake, и я пытаюсь сделать то же самое, я экспериментировал с делать что-то вроде этого в моем сценарии для достижения того же:

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

Затем призывающую psake с PublishForLive или PublishForStaging , в зависимости от того, что мне нужно:

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

Но, похоже, это не работает для меня! Установка переменной $ environment в предварительном условии задачи, похоже, не влияет. Все еще пытаюсь сделать эту работу ...

+0

Попробуйте сделать переопределение переменных $ environment видимым вне области сценария, например '$ script: environment =" Live "' –

+0

Это условие гонки в вашем примере. Публикация будет запущена перед PublishForStaging. Другим решением было бы назвать публикацию из PublishForStaging, но не знаете, возможно ли это или нет? – orjan

+0

Это работает для меня: задача PublishStage { $ окружения = «этап» ExecuteTask («Опубликовать») } – orjan

1

Глобальная переменная разрешит мою проблему на данный момент и только с одной ссылкой на $ global: arg_environent будет легко изменяться, если я найду лучший способ вставить свойства.

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" 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^