在 Github runner (Ubuntu) 上构建的 Dotnet 失败,“N/A”不是有效的版本字符串

Posted

技术标签:

【中文标题】在 Github runner (Ubuntu) 上构建的 Dotnet 失败,“N/A”不是有效的版本字符串【英文标题】:Dotnet build on Github runner (Ubuntu) fails with 'N/A' is not a valid version string 【发布时间】:2021-12-22 06:45:50 【问题描述】:

我在 Ubuntu (18.04.4 LTS) 上使用 Github 运行器(以 root 身份运行)构建了一个 dotnet 项目。构建意外失败(2 次成功运行,然后每次都失败)。 直接从命令行运行时,每次都使用相同的构建命令:

dotnet publish --configuration Release ./Gif

我在使用 github runner 时遇到的一致错误:

dotnet publish --configuration Release ./Gif
shell: /bin/bash -e 0
env:
DOTNET_ROOT: /root/.dotnet
VERSION: 123
Microsoft (R) Build Engine version 16.7.2+b60ddb6f4 for .NET
Copyright (C) Microsoft Corporation. All rights reserved.
Determining projects to restore...
/root/.dotnet/sdk/3.1.415/NuGet.targets(128,5): error : 'N/A' is not a valid version string. (Parameter 'value') [/home/actions-runner/_work/gif-onboarding/gif-onboarding/Gif/Gif.sln]
Error: Process completed with exit code 1.

构建yaml文件:

name: .NET-main

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:
    runs-on: self-hosted
    steps: 
    - name: Cleanup
      run: 
        rm -rf ./*
    - uses: actions/checkout@v2
    - name: Setup .NET
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: 3.1.x
    - name: Build
      env: 
        VERSION: "123"
      run: dotnet publish --configuration Release ./Gif
    - name: Deploy
      run: |
        cp -a ./Gif/GifOnboarding/bin/Release/netcoreapp3.1/* /var/www/dotnet/

我已经尝试过“env:VERSION”参数。在一系列失败之后 - 当我添加 env:VERSION 参数时 - 它成功了两次,然后又回到错误。通过将 env:version 添加/删除到 yaml 文件,我无法再次重现它。

引用的 /3.1.415/NuGet.targets(128,5) 如下所示:

 <RestoreTask
      RestoreGraphItems="@(_RestoreGraphEntryFiltered)"
      RestoreDisableParallel="$(RestoreDisableParallel)"
      RestoreNoCache="$(RestoreNoCache)"
      RestoreIgnoreFailedSources="$(RestoreIgnoreFailedSources)"
      RestoreRecursive="$(RestoreRecursive)"
      RestoreForce="$(RestoreForce)"
      HideWarningsAndErrors="$(HideWarningsAndErrors)"
      Interactive="$(NuGetInteractive)"
      RestoreForceEvaluate="$(RestoreForceEvaluate)"
      RestorePackagesConfig="$(RestorePackagesConfig)"/>

如何进一步解决此问题?

【问题讨论】:

【参考方案1】:

最后的解决方案是将 ENV 变量“版本”设置为 1 (int)。对于我需要的每个步骤:

- name: Build
  env: 
    version: 1
  run: dotnet publish --configuration Release ./Gif

我发现如果我跑步:

dotnet restore --ignore-failed-sources -v diag ./Gif/InternalWeb

-v diag 输出的部分是:

...
Environment at start of build:
...
version = N/A
...

然后,我确保将此变量设置为数值 (1)。现在构建按预期工作。

【讨论】:

以上是关于在 Github runner (Ubuntu) 上构建的 Dotnet 失败,“N/A”不是有效的版本字符串的主要内容,如果未能解决你的问题,请参考以下文章

Gitlab runner:无法在 Ubuntu 上回收 Docker 空间 - 设备上没有剩余空间

Self-Hosted Github Runner:在作业中启动一个后台服务器进程,让它在作业结束后运行

gitlab gitlab runner

gitlab-runner 随机运行为 root 而不是用户 gitlab-runner

gitlab runner安装

Gitlab runner docker无法解析主机