Могу ли я вернуть в GitHub Actions значение, которое будет использоваться в качестве условия позже? - PullRequest
1 голос
/ 02 ноября 2019

Я настраиваю GitHub Actions в качестве CI для одного из моих проектов , и весь процесс сборки в основном представляет собой скрипт PowerShell, управляемый переменными среды.

Это обачтобы минимизировать блокировку вендора и убедиться, что я могу запустить сборку локально с почти таким же процессом.

Теперь мой скрипт сборки определяет некоторые вещи и помещает их в переменные среды - в частности, у меня есть *Переменная 1007 *, которая имеет значение True или False, и определяет, в какой репозиторий пакетов nuget я отправляю.

Однако, когда шаг, выполняющий оболочку, выполнен, переменная среды перестает существовать, так как дальнейшие шаги выполняются вкажется, что новая среда

То, что я хочу сделать, выглядит примерно так (сокращенно):

  steps:
    - name: Run build script
      id: pwshbuild
      shell: pwsh
      run: |
        cd scripts
        ./build.ps1
        # The above sets $Env:MH_IS_PROD_BUILD to either True or False
    - name: Push Publish to GPR (Dev Package)
      if: steps.pwshbuild.outputs.MH_IS_PROD_BUILD == 'False'
      shell: pwsh
      run: |
        # omitted: determine $nupkgPath
        nuget push $nupkgPath -Source "GPR" -SkipDuplicate
    - name: Push Publish to Nuget.org (Release Package)
      if: steps.pwshbuild.outputs.MH_IS_PROD_BUILD == 'True' 
      shell: pwsh
      run: |
        # omitted: determine $nupkgPath
        nuget push $nupkgPath -Source "NugetOrg" -SkipDuplicate

Похоже, что выводит это то, что мне нужно, но, кажется, для этого нужно создать пользовательское действие?

Выше, конечно, не работает (следовательно, спрашиваю). Итак, мне интересно, как лучше двигаться вперед?

  • Можно ли настроить выход шага из PowerShell? (предпочтительно)
  • Нужно ли создавать собственное действие для инкапсуляции моего вызова build.ps1, чтобы я мог возвращать вещи через выходные данные?

Ответы [ 2 ]

2 голосов
/ 03 ноября 2019

Я думаю, что вы можете установить выходные данные из Powershell, просто отобразив их на консоли. Powershell имеет эхо-отображение для псевдонима Write-Output.

jobs:
  windows-test:
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v1
      - name: Set outputs
        id: vars
        shell: pwsh
        run: echo "::set-output name=production::true"
      - name: Check outputs
        shell: pwsh
        run: echo ${{ steps.vars.outputs.production }}

ref: https://help.github.com/en/github/automating-your-workflow-with-github-actions/development-tools-for-github-actions#set-an-output-parameter-set-output

1 голос
/ 04 ноября 2019

В дополнение к ответу peterevans вы все еще можете использовать переменные окружения для условий, пока они задаются с помощью :: set-env"command"

Пример:

- run:   |
         if [ -f FileMightNotExists.txt ]; then
            echo ::set-env name=HAVE_FILE::true
         fi
  shell: bash

- run: echo "I have file!"
  if:  env.HAVE_FILE == 'true'

Как уже упоминалось, уже есть :: set-output , так что это в основном дело вкуса.

Что делает :: set-env более простым в использовании (на мой взгляд), так это то, что вам не нужно устанавливать id для шагов (меньше набирать), ссылки на vars - это многокороче (меньше ввода снова), все переменные, которые вы добавили, будут перечислены для каждого шага (свернуты в блоке Run, могут быть полезны при поиске ошибок в рабочем процессе), и, ну ... в конце концов, это просто обычная переменная,с ним проще работать, зависит от оболочки.

...