2017-11-09 15 views
0

내 저장소가 AWS CodeCommit에 있습니다. 나는 AWS CLI 구성 명령을 실행 한 :저장소가 AWS CodeCommit 일 때 Windows에서 Chef recipe에서 GIT 명령을 실행하는 방법?

aws configure --profile test 

내 IAM 사용자에게 정책 'AWSCodeCommitPowerUser'을 할당했다. \ [my_user]

\ \ 사용자 : .aws 디렉토리와 .gitconfig 파일이 제대로 C 안에 내 사용자에 대해 생성되는 것을 내가 확인한

git config --global credential.helper '!aws --profile test codecommit credential-helper [email protected]' 
git config --global credential.UseHttpPath true 

: 나는 나의 AWS 프로필을 사용하도록 내 GIT 자격 증명 관리자를 지적 필자는 powershell 콘솔에서 필요한 자식 제어 디렉토리에서 git pull 명령을 수행 할 수 있는지 확인했습니다.

그러나 요리사 레시피에서 동일한 명령을 실행하면 자식 디렉터리가 업데이트되지 않습니다. git timeout 오류가 계속 발생하고 작업 관리자에서 Git Credential Manager 작업이 실행되고 있음을 알 수 있습니다. 그 후에 나의 제조법은 실패합니다. 요리사 클라이언트가 있습니다. 12.14.89

어떻게 작동합니까?

+0

요리사 레시피를 실행하는 사용자는 누구입니까? 다른 사용자이거나 다른 사용자로 시작한 서비스를 통해 실행중인 경우 해당 사용자에 대해 aws와 git를 모두 구성해야합니다. – arco444

+0

windows_task 리소스를 통해 내 chef-client를 실행하여 도메인 사용자가 내가 물건을 구성했습니다. – Chiranjib

답변

1

첫째, 실패 노력의 요약 :

powershell_script 'git-sync' do 
    cwd "#{ENV['HOME']}']}" 
    code <<-EOH 
     git pull 
    EOH 
end 
자원이

ruby_block 'git-sync' do 
    block do 
     script <<-EOH 
      git pull 
     EOH 
    end 
    result = powershell_out(script) 
    if (!result.stdout.to_s.empty?) 
     Chef::Log.info("GIT command output::\n#{result.stdout.to_s}") 
    end 
end 

같은 문제를 -noprofile 태그로 PowerShell을 실행하고 사용자의 설정이로드되지 않기 때문에

가 작동하지 않습니다, 아무튼 일하지 마라. 이제 르 강

git "#{node.run_state['git_directory']}" do 
    repository "#{node.run_state['git_repo']}" 
    revision "#{node.run_state['git_branch']}" 
    action :sync 
    user "#{ENV['USER']}" 
end 

하나 user 속성을 지정하는 때문에 일부 nil이 디렉토리에 대해 불평 터무니없는 오류로 실패하기 때문에 하나 이상 작동하지 않습니다.

조리법 git_sync.rb :

검사시, 나는 자원은 아마

이제 리눅스 기본 루비 파일이 Etc.getpwnam을 사용합니다 (..)와 함께 솔루션을 작동 할 것을 깨달았다

ruby_block 'git-sync' do 
    block do 
    psFile = "#{Chef::Config[:file_cache_path]}/cookbooks/#{cookbook_name}/files/git_align.ps1" 
    node.run_state['git_directories'].each { |location| 
     scriptOutput = `powershell.exe -NoLogo -NonInteractive -File #{psFile} #{location} #{node.run_state['git_branch']}` 
     Chef::Log.info("Git Sync Output::\n#{scriptOutput}") 
    } 
    end 
end 

PowerShell 스크립트 git_align.ps1 :

Param(
    [string]$location, 
    [string]$branch_name 
) 
Try{ 
    $output = "" 
    $loc = Resolve-Path -path $location 
    if ($loc -eq $null) {throw "$location not found"} 
    Set-Location $loc 
    $output+= "At location $loc`n" 

    $curr_branch = git rev-parse --abbrev-ref HEAD 
    if ($curr_branch -ne $branch_name){ 
    $output+= git checkout $branch_name 
    $output+= "`n" 
    } 
    if ($? -eq $false) {throw "GIT checkout failed"} 

    $output+= git reset --hard origin/$branch_name 
    $output+= "`n" 
    if ($? -eq $false) {throw "GIT reset failed"} 

    $output+= git pull 
    $output+= "`n" 
    if ($? -eq $false) {throw "GIT pull failed"} 

    Write-Output $output 
} 
Catch{ 
    $exc = $_.Exception | format-list -force 
    Write-Output $exc 
    Throw $exc 
} 

희망 하시겠습니까? 주방장은 때로는 바다처럼 보이며 아무도 혼자 수영을해서는 안됩니다!