标签: github-actions

在多个存储库上重用 Github Actions 自托管运行器

我有一个自托管 Github Actions 运行器在我的服务器上运行,用于我的 1 个存储库。但是现在我想将同一个跑步者用于其他回购。

有没有一种方法可以将相同的 Github Actions 运行器重用于其他存储库,而无需创建新的运行器?

github ubuntu-server github-actions

11
推荐指数
3
解决办法
2546
查看次数

为通过 GitHub 操作执行的单元测试运行本地主机服务器

我有以下 GitHub 工作流程来构建我的项目

name: build

on: [push]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: set up JDK 1.8
      uses: actions/setup-java@v1
      with:
        java-version: 1.8
    - name: Build with Maven
      run: mvn clean compile test
Run Code Online (Sandbox Code Playgroud)

构建工作得很好。但是,项目 JUnit 测试要求 localhost 服务器正在侦听端口 4444 ...并且我收到以下错误:

连接被拒绝:localhost/127.0.0.1:4444

服务器在每个 JUnit 测试之前启动,并且是测试套件的一部分。

如何告诉 docker 容器此端口上允许网络连接?或者默认情况下是否有任何开放端口?

workflow yaml github github-actions

11
推荐指数
1
解决办法
2215
查看次数

如何在多个存储库中使用 GitHub Actions 并部署到 GitHub Pages?

有没有办法设置 Github Actions 来运行多个npm run builds?我想使用多个存储库并将它们设置为主站点上的不同网页。

想象一下,我有 3 个存储库:Main、Angular App 和 React App。

Main repo 将包含我的登陆站点。Angular App 和 React App 将是两个不同的站点。

foobar.github.io(主存储库),我会去foobar.github.io/angular导航到我的 Angular 应用程序。foobar.github.io/react将是一个反应应用程序。

每个应用程序将位于 3 个不同的存储库中。有没有办法让我推送到我的 Angular 应用程序,GitHub Actions 会自动执行ng build --prod --base-href='angular', 并更新该页面甚至为所有存储库运行构建并部署它?

要在本地执行此操作,我必须在每个存储库上执行构建命令,然后将每个prod文件夹拖到我的存储库中,然后将其向上推,在我看来,这会变得非常低效。

github github-pages github-actions

11
推荐指数
2
解决办法
5325
查看次数

动态检索 GitHub 操作密钥

我正在尝试在运行时使用 GitHub Actions 动态拉回 GitHub 机密:

假设我有两个 GitHub Secrets:

  1. SECRET_ORANGES : "这是一个橙色的秘密"
  2. SECRET_APPLES : "这是苹果的秘密"

在我的 GitHub Action 中,我有另一个 env 变量,它在分支之间会有所不同

env:
  FRUIT_NAME: APPLES
Run Code Online (Sandbox Code Playgroud)

本质上,我想找到一种方法来进行某种变量替换以获得正确的秘密。因此,在我的一项儿童工作中,我想做以下事情:

env:
  FRUIT_SECRET: {{ 'SECRET_' + env.FRUIT_NAME }}
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法但没有运气:

secrets['SECRET_$FRUIT_NAME'] }}
Run Code Online (Sandbox Code Playgroud)

我什至尝试了一种没有串联的更简单的方法,只是为了尝试让它工作

secrets['$FRUIT_NAME'] }}
Run Code Online (Sandbox Code Playgroud)

{{ secrets.$FRUIT_NAME }}

Run Code Online (Sandbox Code Playgroud)

以上都没有奏效。

如果我没有很好地解释这一点,请道歉。我试图让我的例子尽可能简单。

任何人都知道如何实现这一目标?

或者,我想做的是在每个分支的基础上存储秘密

例如:

customer1代码分支中: SECRET_CREDENTIAL="abc123"

customer2代码分支中: SECRET_CREDENTIAL="def456"

然后我可以SECRET_CREDENTIAL根据我所在的分支访问正确的值。

谢谢!

更新:我越来越接近我想要实现的目标:

name: Test

env:
  CUSTOMER: CUSTOMER1

jobs:
  build:
    runs-on: ubuntu-latest
    env:
      AWS_ACCESS_KEY_ID: ${{ env.CUSTOMER }}_AWS_ACCESS_KEY_ID
    steps:
    - uses: actions/checkout@v2
    - run: …
Run Code Online (Sandbox Code Playgroud)

github github-actions

11
推荐指数
4
解决办法
4242
查看次数

GitHub Actions cronjob 触发器似乎在一小时后触发

虽然我使用过 GitHub Actions(带有推送触发器),但对于根据指定时间安排它们还相当陌生。简单地说:我cronjob使用以下触发器在 GitHub Actions 上进行了简单的运行:

on:
  schedule:
    - cron: "0 0 * * *"
Run Code Online (Sandbox Code Playgroud)

这应该在每天 UTC 0 点运行,但我在日志中看到它至少在 1 小时后(在 UTC 01:04-01:11 之间)启动。我知道 GitHub Actions 的调度是这样的,它可能会延迟几分钟之类的,但这似乎很奇怪,它在一周半的时间里以相当一致的方式延迟了一个多小时。

有人知道如何解决这个问题吗?我知道这很小,但有点烦人,如果我需要在指定时间发生事件,我想了解一些事情。

cron github github-actions

11
推荐指数
1
解决办法
2470
查看次数

Github Action:在矩阵组合之前运行一步

我正在创建一个 Github 操作工作流程。
有一个 phing 构建文件,可根据产品变体创建多个 zip。这是通过矩阵完成的。

在构建产品之前,需要构建一个 JS 文件。这是通过汇总构建文件完成的。

一切正常,但 JS 构建只需要完成一次,而不是每个矩阵组合都需要完成。

我不知道该怎么做。也许在开始时运行一个单独的工作流程,但是如何将完成的 JS 文件推送到下一个工作流程中?或者也许一种工作流程就可以了?

name: Build

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    env:
      VERSION: 1.0.1
    strategy:
      matrix:
        edition: ["product1", "product2", "product3"]
        limits: [100, 200, 300]
        exclude:
          - edition: product1
            limits: 100
          - edition: product2
            limits: 100
          - edition: product1
            limits: 200
          - edition: product2
            limits: 200
    steps:
      - uses: actions/checkout@v2

      - name: Build JS
        uses: actions/setup-node@v1
        with:
          node-version: 12.x
      - name: Cache Node.js modules
        uses: actions/cache@v2
        with:
          path: …
Run Code Online (Sandbox Code Playgroud)

build github github-actions

11
推荐指数
1
解决办法
7205
查看次数

如何处理 Github Actions Workflow 中的长条件表达式

如何最好地处理 GitHub Actions Workflow 中的长条件表达式?

我有一个工作流程,我想在两种情况下运行:

  1. 当拉取请求关闭时
  2. 当在拉取请求上创建包含特定字符串的评论时

这导致工作流定义具有长if表达式:

on:
  pull_request:
    types: [ closed ]
  issue_comment:
    types: [ created ]
jobs:
  do:
    if: ${{ github.event_name == 'pull_request' || (github.event_name == 'issue_comment' && github.event.issue.pull_request && contains(github.event.comment.body, 'specific string')) }}
    steps:
      ...
Run Code Online (Sandbox Code Playgroud)

我看到的一个解决方案是将工作流程分成 2 个定义,但由于 DRY,我想避免这种情况。

我搜索了一些想法,但没有找到以下可行的解决方案:

  • 在多行上定义表达式
  • 将 if 拆分为多个 if 表达式

github-actions

11
推荐指数
1
解决办法
7773
查看次数

Github Actions下构建作业时如何安装本地python包?

我正在构建一个 python 项目—— potion. 我想在将新分支合并到 master 之前使用 Github 操作来自动执行一些 linting 和测试。

为此,我使用了对 Github 推荐的 python actions 启动工作流程——Python Application的轻微修改。

在作业中的“安装依赖项”步骤中,我收到错误。这是因为 pip 尝试安装我的本地软件包potion但失败。

失败的代码if [ -f requirements.txt ]; then pip install -r requirements.txt; fi

对应的错误是:

ERROR: git+https@github.com:<github_username>/potion.git@82210990ac6190306ab1183d5e5b9962545f7714#egg=potion is not a valid editable requirement. It should either be a path to a local project or a VCS URL (beginning with bzr+http, bzr+https, bzr+ssh, bzr+sftp, bzr+ftp, bzr+lp, bzr+file, git+http, git+https, git+ssh, git+git, git+file, hg+file, hg+http, hg+https, hg+ssh, hg+static-http, svn+ssh, …
Run Code Online (Sandbox Code Playgroud)

python pip github requirements.txt github-actions

11
推荐指数
1
解决办法
2万
查看次数

Github Action 在多个 on:push: 路径上触发

paths: 'frontend/**'在单个存储库中,我想为不同的路径 [和]创建多个触发器,paths: 'backend/**'并为(相同的)构建作业使用不同的参数。以下是两个工作流程。

name: Trigger Jenkins Build [ Build-Portal ]
on:
  push:
    branches: [ develop ]
    paths: 'frontend/**'
    types: [closed]
jobs:
  build:
    name: Triggering Jenkins Build [ Build-Portal ]
    runs-on: ubuntu-latest
    if: github.event.pull_request.merged == true
    steps:
    - name: Trigger Build-Portal
      uses: actions/trigger-jenkins@develop
      with:
        ...
        job_name: "Build-Portal"
        job_params: '{"FRESH_BUILD":"True", "UI":"True", "BUILD_BRANCH":"develop", "DEPLOY_DEV":"True"}'
        ...

Run Code Online (Sandbox Code Playgroud)

name: Trigger Jenkins Build [ Build-Portal ]
on:
  push:
    branches: [ develop ]
    paths: 'backend/**'
    types: [closed]
jobs:
  build:
    name: Triggering Jenkins Build …
Run Code Online (Sandbox Code Playgroud)

github-actions building-github-actions

11
推荐指数
1
解决办法
2万
查看次数

如何使用私有存储库中存在的复合操作?

我们对第三方服务进行了大量的健康检查。我们希望它们定期运行,因为当它们出现故障时,它会像代码中的错误一样影响我们的应用程序。知道“是他们而不是我们”可以显着减少故障排除时间。

我们已经通过 github 操作设置了此运行状况检查并计划运行,但我们希望每个第三方服务都有一个运行状况检查。这样,有关失败的 slack 消息将非常具体地说明发生了什么情况。但这会创建大量重复的 yml 内容。

我发现了一个叫做github 复合操作的东西,它似乎是为了解决这个问题,但我找不到有关复合操作是否可以存在于私有存储库中的信息。

uses密钥的文档仅在提及存储库时才提及公共存储库。有没有办法在私有存储库中进行复合操作并使用它?

我尝试制作他们的 hello world 示例,运行它,并且运行正确。然后我将操作存储库设为私有,并且使用操作构建的存储库失败并显示:

Unable to resolve action `user/repo@v1`, repository not found
Run Code Online (Sandbox Code Playgroud)

github repository github-actions

11
推荐指数
3
解决办法
9129
查看次数