Задание Powershell с альтернативными учетными данными из Octopus Deploy

У меня есть щупальце осьминога, на котором запущен сценарий развертывания. Щупальце работает как учетная запись LocalSystem.

Внутри сценария я могу делать практически все, что мне нужно, за исключением некоторой части архива. Архив должен быть выполнен под разными учетными данными домена, потому что он находится в общей сетевой папке.

Разочаровывает то, что приведенный ниже код работает локально, но при запуске с щупалец он выдает ошибку.

-------------------------------------------------- - [Backup Nupkg] -------------------------------------------- -------- Сохранение резервной версии GeoSphere.1.2.1.1722.nupkg для среды разработки
Ошибка 09:24:32 [localhost] При запуске фонового процесса
произошла ошибка. Ошибка Ошибка 09:24:32 Сообщается:
отказано в доступе. Ошибка 09:24:32 В
C: \ Octopus \ Deployments \ Development \ GeoSphere \ 1.2.1.1722 \ deploy.ps1: 121
Ошибка 09:24:32 char: 1 Ошибка 09:24:32
+ Receive-Job $ job Ошибка 09:24:32
+ ~~~~~~~~~~~~~~~~ Ошибка 09:24:32
+ CategoryInfo: OpenError: (localhost: String) [], PSRemotingTran Error 09:24:32 sportException Error 09:24:32
+ FullyQualifiedErrorId: -2147467259, PSSessionStateBroken Info 09:24:32 HasMoreData: False StatusMessage: Расположение:
localhost Команда: Import- Модуль $ args [3]
Backup-Nupkg $ args [0] $ args [1] $ args [2]
JobStateInfo: Failed Завершено: System.Threading.ManualResetEvent InstanceId:
0c031592-4c2a-4f8b -b014-a5ba79be09f7 Id: 1 Имя:
Job1 ChildJobs: {Job2} PSBeginTime: 13/11/2014 9:24:30 AM
PSEndTime: 13/11/2014 9:24:31 AM PSJobTypeName: BackgroundJob
Вывод: {} Ошибка: {} Ход выполнения: {} Подробно
: {} Отладка: {} Предупреждение: {} Состояние: сбой
Неустранимый 09:24:32 Сценарий PowerShell вернул ненулевой код выхода: 1
Tentacle, версия 2.5.11.614

Вот код

$pwd = convertto-securestring "[PASSWORD]" -asplaintext -force
$cred=new-object -typename System.Management.Automation.PSCredential -argumentlist "[DOMAIN\USER]",$pwd
$packageName = "GeoSphere.$Version.nupkg"
$backupPath = $($es.backupPath)
$artifactsPath = $($es.artifactsPath)
$job = Start-Job -ScriptBlock {
    Import-Module $args[3]
    Backup-Nupkg $args[0] $args[1] $args[2]
} -ArgumentList @($packageName,$backupPath,$artifactsPath,"$currentDir\modules\ApplicationUtilities") -Credential $cred

Wait-Job $Job
Receive-Job $job

Вот модуль ApplicationUtilities

function Backup-Nupkg{
    param(
        [parameter(Mandatory=$true,position=0)] [string] $packageName,
        [parameter(Mandatory=$true,position=1)] [string] $backupPath,
        [parameter(Mandatory=$true,position=2)] [string] $artifactsPath
    )

    if(!(Test-Path $($backupPath))) {
        md $($backupPath)
    } else {
        Remove-Item "$($backupPath)\*" -recurse -Force
    }

    Copy-Item $artifactsPath\$packageName $backupPath
}

Export-ModuleMember Backup-Nupkg

Каков волшебный трюк, чтобы заставить его убежать от щупальца, как это происходит локально?


person Chase Florell    schedule 13.11.2014    source источник
comment
Кроме того, я попытался запустить службу Tentacle от имени указанного пользователя, но затем у меня возникла проблема с конфигурацией IIS, которая добавила еще один гаечный ключ. Эти чертовы проблемы с авторизацией болезненны.   -  person Chase Florell    schedule 13.11.2014


Ответы (1)


Я пробовал то же самое, но безуспешно, похоже, что невозможно начать работу от имени другого пользователя. В этом аналогичном вопросе Леблан вместо этого использовал WinRM и Invoke-Command:

запустить блок сценария от имени конкретного пользователя с помощью Powershell

(Я не думаю, что это что-то особенное для Octopus - проблема, похоже, больше связана с тем, что SYSTEM может запускать процессы от имени другого пользователя, или с Start-Job под SYSTEM, или, возможно, с обоими)

person Paul Stovell    schedule 16.11.2014
comment
Спасибо, Пол. Я изменил учетную запись службы на учетную запись с учетными данными администратора. Оттуда я смог сделать копию без необходимости начинать новую работу. - person Chase Florell; 16.11.2014