标签: github-actions

Github Actions - 未授予对存储库的写访问权限

问题

我有一个私有存储库,我正在尝试将 python-semantic-release 添加到 GitHub Actions 中。

当尝试增加版本号时,我收到错误消息,指出我没有对存储库的写访问权限。我已经使用了 Github Classic PAT 和 Finegrained PAT,但两者都不起作用。我授予了所有回购权限只是为了确保我没有搞砸任何事情。

我还在 GitHub Actions 中回应了我的 Secrets.TOKEN,以确保它们也被正确调用。

即使我已生成具有存储库所有权限的访问令牌,为什么我仍会收到写入错误?

主.yml
name: Semantic Release

on:
  push:
    branches:
      - main

jobs:
  release:
    runs-on: ubuntu-latest
    concurrency: release

    steps:
      - uses: actions/checkout@v2
        with:
          fetch-depth: 0
      - name: Step 1 - Echo out a GitHub Actions Secret to the logs
        run: |
          echo "The GitHub Action Secret will be masked:  "
          echo ${{ secrets.TOKEN }}
          echo "Trick to echo GitHub Actions Secret: …
Run Code Online (Sandbox Code Playgroud)

github access-token github-actions github-secret

5
推荐指数
1
解决办法
4412
查看次数

github actions 中整个工作流程的矩阵策略

通过矩阵策略和如下两个作业,第一个作业并行运行可能配置的“矩阵”,当所有配置都成功时,它会转移到第二个作业。

jobs:
  job1:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        version: [10, 12, 14]
    steps:
      # etc

  job2:
    runs-on: ubuntu-latest
    needs: job1
    strategy:
      matrix:
        version: [10, 12, 14]
    steps:
      # etc
Run Code Online (Sandbox Code Playgroud)

最好的是在整个工作流程中本质上有一个矩阵,其中对于每个矩阵值,整个作业工作流程不受阻碍地并行运行。这意味着特定配置job2可以在该配置完成后立即继续job1,无论job1另一个配置是否仍在进行中或已失败。

在下图中,第一种情况是当前将发生的情况,第二种情况是期望的情况:

github 动作矩阵图

我觉得这可以通过在不同的上下文中多次启动工作流程来“模拟”。但如何才能做到这一点,例如通过触发器?以某种方式指定on: push工作流程的 3 个版本必须同时运行?

github-actions

5
推荐指数
1
解决办法
3817
查看次数

如何修复 Github Actions dotnet 发布工作流程错误:构建解决方案时不支持“--output”选项

dotnet 发布工作流任务的工作方式发生了一些变化。我们使用这个非常简单的 yaml 脚本已经有一段时间了。

name: Publish to staging server

env:
  AZURE_WEBAPP_NAME: 'my-dotnet-webapp'
  AZURE_SLOT_NAME: 'staging'
  GITHUB_PUBLISH_SECRET: ${{ secrets.AZURE_DEPLOYMENTSLOT_STAGING }}
  AZURE_WEBAPP_PACKAGE_PATH: '.'
  DOTNET_VERSION: '7.0.0' 

on:
  push:
    branches:
      - staging
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3

      - name: Set up .NET Core
        uses: actions/setup-dotnet@v3
        with:
          dotnet-version: ${{ env.DOTNET_VERSION }}

      - name: Set up dependency caching for faster builds
        uses: actions/cache@v3
        with:
          path: ~/.nuget/packages
          key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
          restore-keys: |
            ${{ runner.os }}-nuget-

      - name: Build with dotnet
        run: …
Run Code Online (Sandbox Code Playgroud)

asp.net-core github-actions

5
推荐指数
1
解决办法
1889
查看次数

如何更快地调试 GitHub Actions 工作流程?

我发现编辑 yml 文件,然后再次推送新的提交,并重复该过程数百次直到正确为止,效率很低。我开始思考如何自动化这个繁琐的过程。

我尝试了 GitHub Actions 日志记录,但没有多大帮助。

github-actions

5
推荐指数
1
解决办法
1677
查看次数

由于缺少依赖项,.NET 应用程序测试在 GitHub Actions 上失败

我在 .NET 解决方案中有一组 .NET 6.0 项目,其中一个是测试数据提供程序。我正在使用LiteDB来存储测试数据记录。该解决方案在本地构建良好并成功完成所有测试。我已经使用 GitHub Actions 在 GitHub 上设置了标准 CI 构建管道;构建完成时没有出现任何问题,并且不依赖于测试数据库的测试运行良好

但是依赖于 LiteDb 数据库的测试无法运行,因为构建服务器在查找 LiteDb 程序集时似乎存在问题:

源“/home/runner/work/MyProject.Core/MyProject.Core/test/MyProject.Testing.Data/bin/Release/net6.0/MyProject.Testing.Data.dll”的测试主机进程退出并出现错误:错误:找不到应用程序依赖项清单 (MyProject.Testing.Data.deps.json) 中指定的程序集:包:'LiteDB',版本:'5.0.16' 路径:'lib/netstandard2.0/LiteDB。 DLL'

大多数具有类似错误消息的文章都与 ASP.NET Core 相关,例如,未找到应用程序依赖项清单 (...) 中指定的程序集,但抓住了救命稻草,我尝试将以下内容添加到测试数据项目中:

<PublishWithAspNetCoreTargetManifest>false</PublishWithAspNetCoreTargetManifest>
Run Code Online (Sandbox Code Playgroud)

这没有什么区别。另一个SO答案(How do I get .NET Core items to copy NuGetreferences to the buildoutput?)建议将以下内容添加到.csproj:

<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
Run Code Online (Sandbox Code Playgroud)

这解决了缺少的依赖项,但引入了一个新的依赖项:

源“/home/runner/work/MyProject/MyProject/test/MyProject.Testing.Data/bin/Release/net6.0/MyProject.Testing.Data.dll”的测试主机进程退出并出现错误:错误:An找不到应用程序依赖项清单 (testhost.deps.json) 中指定的程序集:包:'Microsoft.TestPlatform.CommunicationUtilities',版本:'15.0.0.0' 路径:'Microsoft.TestPlatform.CommunicationUtilities.dll'

(当然,我尝试添加 Microsoft.TestPlatform 作为依赖项,但这没有任何区别。)

为了完整起见,我确认 Linux 上支持 LiteDb,因为 GitHub Actions 服务在 Ubuntu 上运行 - 看起来那里没有任何问题。应用程序和所有程序集(和测试)都以 .NET 6.0 为目标,并且所有项目都设置为构建 AnyCPU。这是我的ci.yml文件,如果有帮助的话:

name: …
Run Code Online (Sandbox Code Playgroud)

c# .net-core github-actions

5
推荐指数
1
解决办法
1234
查看次数

GitHub 自托管运行程序创建 Repo 文件夹两次

我已经在 Windows 服务器上设置了一个自托管运行器,并且设置了在服务器上自动部署/构建存储库所需的必要工作流程。在设置运行器时,我将工作文件夹配置为repos同一目录中调用的文件夹。

我想要的是我的跑步者的文件夹结构是:

C:\deploy
    - ...other runner files & folders
    - config.cmd
    - run.cmd
    - repos/
        - ..."_actions/", "_temp/" etc.
        - <my repo name>/
            - ...the content of my repo...
Run Code Online (Sandbox Code Playgroud)

但我看到运行程序在彼此内部创建了 2 个文件夹,并以我的存储库的名称命名。因此,就我而言,构建文件的路径是C:\deploy\repos\<repo name>\<repo name>\build. 有没有办法防止这种双文件夹结构?

git github windows-server github-actions

5
推荐指数
1
解决办法
482
查看次数

错误:buildx 失败:错误:无法解决:无法推送 ghcr.io/:意外状态:403 禁止

我正在使用 GitHub Actions 来构建简单的 docker 映像并将其推送到 GitHub 容器注册表。我的存储库位于组织内部,并且我已在组织级别配置了机密。

该作业成功登录到 ghcr,但是当它尝试将其推送到 ghcr 时,会出现以下错误:

错误:buildx 失败,原因:错误:无法解决:无法推送 ghcr.io/:意外状态:403 禁止。

github-actions.yml

name: Build and Push Freeradius proxy
on:
  push:
    branches:
      - '*'
jobs:
  build-and-push:
    runs-on: ubuntu-latest
    permissions:
      packages: write
    steps:
      - name: Checkout Code
        uses: actions/checkout@v2
        with:
          token: ${{ secrets.GCR_TOKEN}}
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@79abd3f86f79a9d68a23c75a09a9a85889262adf
      - name: Login to GHCR
        uses: docker/login-action@28218f9b04b4f3f62068d7b6ce6ca5b26e35336c
        with:
          registry: ghcr.io
          username: ${{ secrets.REPO_OWNER }}
          password: ${{ secrets.GCR_TOKEN }}
      - name: Build and Push Docker Image
        uses: …
Run Code Online (Sandbox Code Playgroud)

continuous-integration github gitlab docker github-actions

5
推荐指数
1
解决办法
2471
查看次数

GitHub Actions 中的环境和可重用工作流程

我想找到一种方法将环境:语句从可重用工作流程移动到调用工作流程。可重用工作流程的开始是:

name: Reusable Terraform Action
on: 
  workflow_call:
    inputs:
      working-folder:
        description: The name of the client folder to process
        required: true
        type: string

jobs:
  Terraform:
    ***environment: Development***    
    env:
      ARM_CLIENT_ID: ${{ secrets.ARM_CLIENT_ID }}
      ARM_CLIENT_SECRET: ${{ secrets.ARM_CLIENT_SECRET }}
      ARM_TENANT_ID: ${{ secrets.ARM_TENANT_ID }}
      ARM_SUBSCRIPTION_ID: ${{ secrets.ARM_SUBSCRIPTION_ID }}
    runs-on: ubuntu-latest
    defaults:
      run:
        shell: bash
        working-directory: ${{ inputs.working-folder }}
Run Code Online (Sandbox Code Playgroud)

调用流程为:

name: Deployment TF Reuse
on:  
  workflow_dispatch:
jobs:
  walm:
    uses: ./.github/workflows/reuse-terraform.yml
    with:
      working-folder: r3us-walm
Run Code Online (Sandbox Code Playgroud)

无论我尝试将环境:开发行放在调用工作流程中的何处,它都会使解析步骤失败。

如果我能找到一种方法来像这样获取它们,我不介意将这 4 个秘密作为参数传递给可重用工作流程,但它仍然抱怨“uses:”语句。

name: Deployment TF Reuse
on:  
  workflow_dispatch:
jobs:
  walm:
    environment: …
Run Code Online (Sandbox Code Playgroud)

github-actions

5
推荐指数
1
解决办法
995
查看次数

如何对多个 GitHub Action 工作流程运行进行排队?

我不断取消 GitHub Actions 工作流程运行,并显示以下消息:

Canceling since a higher priority waiting request for 'your-project' exists

查看 GitHub Actions 文档,我看到:

When a concurrent job or workflow is queued, if another job or workflow using the same 
concurrency group in the repository is in progress, the queued job or workflow will be
pending. Any previously pending job or workflow in the concurrency group will be canceled. 
Run Code Online (Sandbox Code Playgroud)

因此,这意味着只允许运行一个挂起的工作流程。有没有一种方法可以让我在不使用某种外部排队机制的情况下对多个队列进行排队?

github github-actions

5
推荐指数
1
解决办法
657
查看次数

由另一个工作流触发的工作流在错误的分支上运行

我有一个“工作流程 B”,当“工作流程 A”完成时会自动触发。工作流 A 由每个新的 Pull 请求触发,因此分支会动态变化。

name: Workflow B
on:
  workflow_run:
    workflows: ['Workflow A']
    types:
      - completed
  workflow_dispatch:

jobs:
  first-workflow-job:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3
      - name: Use Node.js
        uses: actions/setup-node@v3
        with:
          cache: 'npm'
Run Code Online (Sandbox Code Playgroud)

我希望工作流程 B 与工作流程 A 在同一分支上运行。但是,工作流程 B 在 master 上运行。如何在这些工作流程之间共享分支值?

github github-actions

5
推荐指数
1
解决办法
422
查看次数