首页 > 解决方案 > 从 .ps1 脚本设置环境变量值在 Github 操作中不起作用

问题描述

我在 Github Actions 中有两个 ps1 脚本。我的场景:

  1. 第一个脚本在构建之前执行
  2. 项目构建
  3. 第二个脚本在构建后执行。

我需要在第一个脚本中设置值并在第二个脚本中使用它。所以我决定使用BUILD_NUMBER环境变量并将其设置为 10 作为默认值。

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

在第一个脚本中,我尝试以多种方式设置此变量,但在第二个脚本中,值为BUILD_NUMBER10。

我尝试设置它:

[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

标签: powershellenvironment-variablesargumentsgithub-actions

解决方案


要在一个步骤中设置可以在另一个步骤中引用的环境变量,您需要使用::set-env语法.

在您的情况下,您的第一个脚本必须运行以下命令:

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

第二个脚本应该能够使用$env:BUILD_NUMBER.


[6/20/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

推荐阅读