Установка значения переменной среды из скрипта .ps1, не работающего в Github Actions - PullRequest
1 голос
/ 19 июня 2020

У меня есть два скрипта ps1 в Github Actions. Мой сценарий:

  1. Первый сценарий выполняется перед сборкой
  2. Сборки проекта
  3. Второй сценарий выполняется после сборки.

Мне нужно чтобы установить значение внутри первого скрипта и использовать его во втором скрипте. Поэтому я решил использовать переменную среды BUILD_NUMBER и установить для нее значение по умолчанию 10.

jobs:
  Droid:
    runs-on: windows-latest
    env:
      BUILD_NUMBER: "10"

Внутри первого скрипта я пытался установить эту переменную несколькими способами, но во втором скрипте значение BUILD_NUMBER было 10.

Мои попытки установить это:

[Environment]::SetEnvironmentVariable($env:BUILD_NUMBER, $buildNumber, 'Machine')

$env:BUILD_NUMBER: '123'

Но внутри второго скрипта я получал 10 значение по этому $newName = "${env:BUILD_NUMBER}"

Весь код на стороне Github Actions:

name: CI

# Controls when the action will run. Triggers the workflow on push or pull request
# events but only for the master branch
on:
  push:
    branches: 
    - 'master'
    - 'develop'
    - 'feature/*'
    - 'rc/*'
  pull_request:
    branches: 
    - 'master'
    - 'develop'
    - 'feature/*'
    - 'rc/*'


jobs:
  Droid:
    runs-on: windows-latest
    env:
      DOTNET_CLI_TELEMETRY_OPTOUT: 'true'
      BUILD_NUMBER: "10"

    steps:
    - uses: actions/checkout@v1
    - name: Run a calculate version and set sign in password script
      run: .\Scripts\CalculateVersionAndSetSignPassword.ps1
      shell: powershell

# Build goes here. It is skipped by me for testing purposes

    - uses: actions/checkout@v1
    - name: Run a change apk name script
      run: |
       .\Scripts\ChangeApkName.ps1
      shell: powershell

Ответы [ 2 ]

0 голосов
/ 21 июня 2020

Нашел разрешение в репо Майкла Штума, которое он предоставил в этом вопросе : ключ был Get-ChildItem Env: | Where-Object {$_.Name -Match "^MH_"} | %{ echo "::set-output name=$($_.Name)::$($_.Value)" } в .yml и $Env:MH_BUILD_VERSION = $version в файле сценария .ps1 в его репозитории. Итак, я успешно получил вывод из сценария .ps1 и использовал его в Github Actions.

0 голосов
/ 20 июня 2020

Чтобы установить переменные среды в шаге, на которые можно ссылаться в другом, вам нужно будет использовать синтаксис ::set-env .

В вашем случае ваш первый скрипт должен будет запустите эту команду:

Write-Output "::set-env name=BUILD_NUMBER::$buildNumber"

И второй сценарий должен иметь возможность ссылаться на него с помощью $env:BUILD_NUMBER.

[20.06.20] Обновление с полным примером.

yaml-файл действий (встроенная оболочка PowerShell будет иметь такое же поведение, что и ps1):

name: StackOverFlow

on:
  push:
    branches: [ master ]

jobs:
  build:
    runs-on: windows-latest

    steps:
    - run: | 
        $buildNumber = "12345"
        Write-Output "::set-env name=BUILD_NUMBER::$buildNumber"

    - run: Write-Output "Doing something else..."
      
    - run: Write-Output "The build number is $env:BUILD_NUMBER"

Журналы вывода:

2020-06-20T23:13:23.3209811Z ##[section]Starting: Request a runner to run this job
2020-06-20T23:13:23.5144969Z Can't find any online and idle self-hosted runner in current repository that matches the required labels: 'windows-latest'
2020-06-20T23:13:23.5145013Z Can't find any online and idle self-hosted runner in current repository's account/organization that matches the required labels: 'windows-latest'
2020-06-20T23:13:23.5145038Z Found online and idle hosted runner in current repository's account/organization that matches the required labels: 'windows-latest'
2020-06-20T23:13:23.6348644Z ##[section]Finishing: Request a runner to run this job
2020-06-20T23:13:29.9867339Z Current runner version: '2.263.0'
2020-06-20T23:13:29.9982614Z ##[group]Operating System
2020-06-20T23:13:29.9983190Z Microsoft Windows Server 2019
2020-06-20T23:13:29.9983380Z 10.0.17763
2020-06-20T23:13:29.9983515Z Datacenter
2020-06-20T23:13:29.9983691Z ##[endgroup]
2020-06-20T23:13:29.9983875Z ##[group]Virtual Environment
2020-06-20T23:13:29.9984067Z Environment: windows-2019
2020-06-20T23:13:29.9984247Z Version: 20200608.1
2020-06-20T23:13:29.9984524Z Included Software: https://github.com/actions/virtual-environments/blob/win19/20200608.1/images/win/Windows2019-Readme.md
2020-06-20T23:13:29.9984752Z ##[endgroup]
2020-06-20T23:13:29.9985890Z Prepare workflow directory
2020-06-20T23:13:30.0151643Z Prepare all required actions
2020-06-20T23:13:30.9154166Z ##[group]Run $buildNumber = "12345"
2020-06-20T23:13:30.9154566Z [36;1m$buildNumber = "12345"[0m
2020-06-20T23:13:30.9154784Z [36;1mWrite-Output "::set-env name=BUILD_NUMBER::$buildNumber"[0m
2020-06-20T23:13:30.9820753Z shell: C:\Program Files\PowerShell\7\pwsh.EXE -command ". '{0}'"
2020-06-20T23:13:30.9821156Z ##[endgroup]
2020-06-20T23:13:43.2981407Z ##[group]Run Write-Output "Doing something else..."
2020-06-20T23:13:43.2981812Z [36;1mWrite-Output "Doing something else..."[0m
2020-06-20T23:13:43.3022226Z shell: C:\Program Files\PowerShell\7\pwsh.EXE -command ". '{0}'"
2020-06-20T23:13:43.3022501Z env:
2020-06-20T23:13:43.3022706Z   BUILD_NUMBER: 12345
2020-06-20T23:13:43.3022906Z ##[endgroup]
2020-06-20T23:13:43.8091340Z Doing something else...
2020-06-20T23:13:43.8671648Z ##[group]Run Write-Output "The build number is $env:BUILD_NUMBER"
2020-06-20T23:13:43.8671986Z [36;1mWrite-Output "The build number is $($env:BUILD_NUMBER)"[0m
2020-06-20T23:13:43.8717102Z shell: C:\Program Files\PowerShell\7\pwsh.EXE -command ". '{0}'"
2020-06-20T23:13:43.8717288Z env:
2020-06-20T23:13:43.8718175Z   BUILD_NUMBER: 12345
2020-06-20T23:13:43.8718286Z ##[endgroup]
2020-06-20T23:13:44.4148124Z The build number is 12345
2020-06-20T23:13:44.4368449Z Cleaning up orphan processes
...