Как безопасно публиковать в NuGet из артефактов PR в Azure - PullRequest
0 голосов
/ 10 октября 2019

Я использую следующий yaml в моем репозитории GitHub для публикации пакетов NuGet в артефактах Azure и пакетах GitHub при каждом коммите и в официальном репозитории NuGet при использовании тега Git.

- stage: Deploy
  jobs:
  - deployment: AzureArtefacts
    displayName: 'Azure Artefacts'
    pool:
      vmImage: windows-latest
    environment: 'Azure Artefacts'
    strategy:
      runOnce:
        deploy:
          steps:
          - task: NuGetToolInstaller@1
            displayName: 'NuGet Install'
          - task: NuGetAuthenticate@0
            displayName: 'NuGet Authenticate'
          - script: nuget push $(Agent.BuildDirectory)\Windows\*.nupkg -Source https://pkgs.dev.azure.com/serilog-exceptions/_packaging/serilog-exceptions/nuget/v3/index.json -ApiKey AzureArtifacts -SkipDuplicate
            displayName: 'NuGet Push'
            failOnStderr: true
  - deployment: GitHub
    pool:
      vmImage: windows-latest
    environment: 'GitHub'
    strategy:
      runOnce:
        deploy:
          steps:
          - task: NuGetToolInstaller@1
            displayName: 'NuGet Install'
          - script: nuget source Add -Name GitHub -Source https://nuget.pkg.github.com/RehanSaeed/index.json -UserName $(GitHubUserName) -Password $(GitHubPersonalAccessToken)
            displayName: 'NuGet Add Source'
            failOnStderr: true
          - script: nuget push $(Agent.BuildDirectory)\Windows\*.nupkg -Source GitHub -SkipDuplicate
            displayName: 'NuGet Push'
            failOnStderr: true
  - deployment: NuGet
    pool:
      vmImage: windows-latest
    environment: 'NuGet'
    condition: startsWith(variables['Build.sourceBranch'], 'refs/tags/')
    strategy:
      runOnce:
        deploy:
          steps:
          - task: NuGetToolInstaller@1
            displayName: 'Install NuGet'
          - script: nuget push $(Agent.BuildDirectory)\Windows\*.nupkg -Source https://api.nuget.org/v3/index.json -ApiKey $(NuGetApiKey) -SkipDuplicate
            displayName: 'NuGet Push'
            failOnStderr: true

Это прекрасно работает, когда я регистрируюсь, но когда кто-то создает PR, описанные выше шаги публикации не выполняются, потому что:

  • Артефакты Azure - у пользователя нет разрешений.
  • GitHub - пользователь не имеет доступа к использованию секретных переменных GitHubUserName и GitHubPersonalAccessToken.
  • NuGet - сборка не выполняется из тега Git, поэтому этот шаг не выполняется.

Можно ли безопасно запускать артефакты Azure и GitHub публиковать шаги из PR? В частности, я не хочу, чтобы кто-то изменял файл azure-pipelines.yml или мой Cake build build.cake, чтобы украсть мои секретные переменные или опубликовать свои собственные пакеты.

Если это невозможноЯ думаю, мне нужно пропустить эти шаги из PR. Как я могу это сделать?

1 Ответ

1 голос
/ 11 октября 2019

Если это невозможно?

Боюсь, это невозможно сделать. Поскольку у пользователя нет прав доступа, секретные переменные GitHubUserName и GitHubPersonalAccessToken. Это ключ к этой проблеме, и его нельзя обойти, если вы не хотите утекать свои секретные переменные.

Я думаю, мне нужно пропустить эти шаги из PR. Как я могу это сделать?

Ответ - да.

Вы можете использовать выражение для оценки встроенной переменной Build.Reason , чтобы определить, выполняет ли задача сборку как часть политики ветвления запроса на получение, например:

condition: and(succeeded(), ne(variables['Build.Reason'], 'PullRequest'))

Тогда эти задачи будут пропущены, когда сборка будет вызвана PullRequest.

Проверьте документ Условия для получения дополнительной информации.

Надеждаэто помогает.

...