Как загрузить релиз (пакет с замененными переменными) на S3, чтобы развернуть его с помощью codedeploy - PullRequest
0 голосов
/ 14 мая 2018

Я пытаюсь использовать AWS Code Deploy с группами автоматического масштабирования.В прошлом я развертывал с осьминогом, и я хочу перейти на AWS.

Итак, у меня есть проект Octopus с несколькими шагами.На первом этапе развертывается шаблон облачной информации, который создает инфраструктуру: vpc, подсети, группы развертывания, группа автоматического масштабирования, ELB, S3 Bucket и т. Д.получить имя корзины S3 с первого шага, чтобы загрузить его в S3.

Как я могу добиться этого с осьминогом?

Спасибо.

1 Ответ

0 голосов
/ 15 мая 2018

Вот как я это сделал:

  1. Добавьте шаг в ваш процесс для развертывания пакета. Я использовал «Jumpbox» для развертывания, он просто должен куда-то идти.
  2. На шаге для развертывания пакета нажмите на настройка функций

  3. Выберите Пользовательские сценарии развертывания

  4. Добавить этот сценарий в качестве сценария развертывания. Он будет загружен в корзину AWS S3 после замены переменных.

    $sourcePath = $OctopusParameters["Octopus.Action.Package.InstallationDirectoryPath"]
    $destinationPath = $OctopusParameters["Your parameter to the full path where you want the Zip file stored"]
    $destinationPathRootDirectory = $OctopusParameters["Your parameter to the folder"]
    
    Write-Host "Cleaning up previous zip files"
    Remove-Item "$destinationPathRootDirectory\*.zip"
    
    Write-Host "Compressing $sourcePath to $destinationPath"
    Compress-Archive -Path "$sourcePath\*"  -DestinationPath $destinationPath -Force
    
    $params = @{}
    
    #Initialises the S3 Credentials based on the Access Key and Secret Key provided, so that we can invoke the APIs further down
    Set-AWSCredentials -AccessKey $AwsAccessKey -SecretKey $AwsAccessSecret -StoreAs S3Creds
    
    #Initialises the Default AWS Region based on the region provided
    Set-DefaultAWSRegion -Region $AwsRegion
    
    #Gets all relevant files and uploads them
    function Upload($item) 
    {
        #Gets all files and child folders within the given directory
        foreach ($i in Get-ChildItem $item) {
                #Inserts file to AWS
                Write-S3Object -ProfileName S3Creds -BucketName $S3BucketName -Key $($i.Name) -File $i.FullName @params
        }
    }
    
    Upload($destinationPath)
    
  5. Добавьте шаг для запуска команды командной строки AWS, которая выполнит развертывание .

Вот мой пример сценария с этого шага:

    # All these parameters are parameters you set in the variables screen in Octopus Deploy

    Write-Host "ApplicationName $AwsApplicationName"
    Write-Host "DeploymentConfigName $AwsCodeDeployConfigName"
    Write-Host "CodeDeployName $AwsCodeDeployGroupName"
    Write-Host "BucketLocation $S3BucketName"
    Write-Host "KeyName $ZipFileName"

    # This is the AWS name of the location where you want to put the bucket, such as us-west-1
    Write-Host "BucketLocation $bucketLocation"

    $fullyQualifiedBucket = "$S3BucketName-$bucketLocation"
    Write-Host "Fully Qualified Bucket $fullyQualifiedBucket"

    $deployment = aws deploy create-deployment --application-name $AwsApplicationName --deployment-config-name $AwsCodeDeployConfigName --deployment-group-name $AwsCodeDeployGroupName --s3-location bucket=$S3BucketName,bundleType=zip,key=$TradingWebSiteZipFileName
    Write-Host "Deployment info $deployment"

Он создает уникальный пакет для каждой среды в корзине S3. Так что вам придется учитывать это. Это не самое совершенное решение в мире, если вы пройдете через это и найдете лучшее, пожалуйста, дайте мне знать!

...