标签: github-actions

仅在 PR 合并时触发 Github Actions

我有一个 github 操作 yaml 文件,如下所示:

name: Test deployment
on:
  pull_request:
    branches:
    - master

jobs:
  deploy:
    runs-on: ubuntu-18.04
    steps:
    - name: Random name
      run: date

Run Code Online (Sandbox Code Playgroud)

当我从一个分支到另一个分支提出 PR 时masterGithub Action会被触发。所以,我将我的 YAML 更新为:

name: Test deployment
on:
  pull_request:
    types:
    - closed
    branches:
    - master

Run Code Online (Sandbox Code Playgroud)

现在它是在我合并 PR 而不是在提升它时触发的。但是当我关闭 PR 而不合并它时它也会被触发。

merged文档中找不到任何类似类型的东西

即使我尝试的以下语法也无法按预期工作:

jobs:
  ...
    if: github.event_name == 'pull_request' && github.event.action == 'closed'
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助我吗?我是否可以检查 PR 是否得到至少一位审阅者的批准?(我可以启用分支保护,但想知道是否存在在 github 操作中执行此操作的任何选项)

git github github-actions

5
推荐指数
4
解决办法
3187
查看次数

GitHub 操作构建的最后一个工件的 URL

我使用 GitHub-action 进行构建,它生成多个工件(具有不同的名称)。

有没有办法预测上次成功构建的工件的 URL?不知道 sha1,只知道工件和回购的名称?

github-actions

5
推荐指数
3
解决办法
1130
查看次数

使用 GitHub Actions 创建标签而不是发布

目前在我的 GitHub 存储库中,我有以下每天发布夜间快照的工作流程,并使用当前日期作为发布名称和标签名称:

name: Nightly Snapshot

on:
  schedule:
  - cron: "59 23 * * *"

jobs:
  build:
    name: Release
    runs-on: ubuntu-latest
    steps:
      - name: Get current date
        id: date
        run: echo "::set-output name=date::$(date +'%Y-%m-%d')"
      - name: Checkout branch "master"
        uses: actions/checkout@v2
        with:
          ref: 'master'
      - name: Release snapshot
        id: release-snapshot
        uses: actions/create-release@latest
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: ${{ steps.date.outputs.date }}
          release_name: ${{ steps.date.outputs.date }}
          draft: false
          prerelease: false
Run Code Online (Sandbox Code Playgroud)

GitHub 将所有以这种方式创建的快照标记为最新版本。但是,我想避免这种情况,并实现类似于Swift 快照的效果:快照只是标签;尽管它们出现在版本中,但它们的处理方式不同。

我应该如何修改我的工作流程文件来实现这一点?谢谢!

github github-api git-tag github-release github-actions

5
推荐指数
3
解决办法
5846
查看次数

GitHub 操作如果包含不适用于 env.VARIABLE 的函数

我已经使用以下方法设置了一个环境变量:

echo "::set-env name=PROJECT_TO_TEST::$(sh scripts/test.sh)"
Run Code Online (Sandbox Code Playgroud)

test.sh 只是回应“SomeString, MoreString”

我确实看到通过执行以下操作正确设置了 PROJECT_TO_TEST 变量:

echo "env.PROJECT_TO_TEST = ${{ env.PROJECT_TO_TEST }}"
Run Code Online (Sandbox Code Playgroud)

输出“env.PROJECT_TO_TEST = SomeString, MoreString”

在接下来的一个步骤中,我正在执行 if 检查以查看 PROJECT_TO_TEST 变量包含一些像这样的字符串:

- name: Conditionally Run
  if: contains('${{ env.PROJECT_TO_TEST }}', 'SomeString')
  run: |
    echo "SomeString did exist and should run"
- name: Conditionally Run
  if: contains('${{ env.PROJECT_TO_TEST }}', 'ShouldNotRun')
  run: |
    echo "ShouldNotRun"  
Run Code Online (Sandbox Code Playgroud)

在这种情况下,应该只打印“SomeString 确实存在并且应该运行”,但也会打印“ShouldNotRun”。

完整代码在这里:https : //github.com/gomfucius/github-actions/blob/master/.github/workflows/pullrequest.yml

说明问题的工作流程:https : //github.com/gomfucius/github-actions/runs/590320131

github-actions

5
推荐指数
2
解决办法
1666
查看次数

Github Action 到 maven 构建,然后是 Docker 构建推送

我是 GitHub Actions 的新手。我有以下 DockerFile

FROM openjdk:8-jdk-alpine
RUN addgroup -S spring && adduser -S spring -G spring
USER spring:spring
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用 GitHub Action Publish Docker,下面是我的操作代码

name: Publish Docker
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@master
    - name: Publish to Registry
      uses: elgohr/Publish-Docker-Github-Action@master
      with:
        name: myDocker/repository
        username: ${{ secrets.DOCKER_USERNAME }}
        password: ${{ secrets.DOCKER_PASSWORD }}
Run Code Online (Sandbox Code Playgroud)

构建失败并出现以下错误

Step 5/6 : COPY ${JAR_FILE} app.jar
COPY failed: no source files were specified
Run Code Online (Sandbox Code Playgroud)

我假设它无法在目标文件夹下获取 jar 文件。我是否应该在 …

docker github-actions

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

Github 操作和 RAILS_MASTER_KEY

我一直在尝试使用 Rails 设置 GitHub 操作,但是我遇到了RAILS_MASTER_KEY(我的假设)的问题。

这是我在最后一步收到的错误消息# Build and run tests

rails aborted!
ActiveSupport::MessageEncryptor::InvalidMessage: ActiveSupport::MessageEncryptor::InvalidMessage
/home/runner/work/my-project/my-project/config/environment.rb:5:in `<main>'
/home/runner/work/my-project/my-project/bin/rails:9:in `<top (required)>'
/home/runner/work/my-project/my-project/bin/spring:15:in `require'
/home/runner/work/my-project/my-project/bin/spring:15:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'

Caused by:
ArgumentError: key must be 16 bytes
Run Code Online (Sandbox Code Playgroud)

.github/workflows/main.yml

rails aborted!
ActiveSupport::MessageEncryptor::InvalidMessage: ActiveSupport::MessageEncryptor::InvalidMessage
/home/runner/work/my-project/my-project/config/environment.rb:5:in `<main>'
/home/runner/work/my-project/my-project/bin/rails:9:in `<top (required)>'
/home/runner/work/my-project/my-project/bin/spring:15:in `require'
/home/runner/work/my-project/my-project/bin/spring:15:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'

Caused by:
ArgumentError: key must be 16 bytes
Run Code Online (Sandbox Code Playgroud)

我推断这与我的 RAILS_MASTER_KEY 变量有关。

我检查了存储在项目 ENV 变量中的密钥,它恰好是 32 个字节。我不确定如何最好地进行,并且我对删除密钥犹豫不决,担心我会破坏应用程序的其他部分。在我的书中,将密钥的选项设置为合法的 32 个字节会更可取——只是我不知道如何以及在哪里......

关于如何解决这个问题的任何想法?

ruby-on-rails environment-variables github-actions

5
推荐指数
2
解决办法
1406
查看次数

Django SECRET_KEY 设置在 github 工作流中不能为空

我有一个 Django 的 GitHub 工作流程,当它迁移数据库时,它给出了错误

django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.
Run Code Online (Sandbox Code Playgroud)

密钥存储在.env文件中并加载

django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.
Run Code Online (Sandbox Code Playgroud)

这是文件树

C:.
|   db.sqlite3
|   manage.py
|
\---djangosite
    |   .env
    |   asgi.py
    |   settings.py
    |   urls.py
    |   wsgi.py
    |   __init__.py
    |
    \---__pycache__
        ...
Run Code Online (Sandbox Code Playgroud)

这是 manage.py,它是常规的 django,从 settings.py 加载 .env 代码

from dotenv import load_dotenv
load_dotenv()
from pathlib import Path
env_path = Path('.') / '.env'
load_dotenv(dotenv_path=env_path)
SECRET_KEY = os.getenv("secret_key")
Run Code Online (Sandbox Code Playgroud)

当我manage.py在我的 PC 上运行时,它会加载密钥并运行服务器,但 GitHub 给出了上述错误。如何阻止此错误发生?

python django github-actions

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

如何共享/扩展/重用/引用 GitHub 工作流?

我有两个工作流程。一个部署在推送到掌握到测试环境。另一个在发布到生产环境时部署。它们 90% 相同,代码复制和粘贴。

有没有把重复逻辑的一部分提取出来放到自己的文件/部分/片段中这样的概念?

workflow cd github github-actions

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

GitHub 操作工作流错误:运行命令超时!即使剧本做得很好

每次提交到存储库时,我都想在我的远程服务器上部署我的 Nuxt.js 应用程序。这是我的 deploy.yml:

name: 'Deployment'

on:
  push:
    branches: ['master']

jobs:
  deploy:
    name: Deploy
    runs-on: ubuntu-latest
    steps:
    - name: Connect to SSH
      uses: appleboy/ssh-action@master
      with:
        host: webhostgb.com
        username: root
        key: ${{ secrets.PRIVATE_KEY }}
        port: 22
        script: |
          cd whgb-new
          git pull origin master
          npm run build
          fuser -kn tcp 3000
          pm2 restart deploy.sh
Run Code Online (Sandbox Code Playgroud)

基本上 deploy.sh 运行 npm start,但我使用 pm2 创建另一个进程而不是在 GitHub 操作进程中进行部署

10 分钟后我收到此错误,即使它做得很好:

err: 4bc06ed9a5a0b2fa431a.js   4.77 KiB      14  [emitted] [immutable]  pages/products/tags/_slug
err: 7bf498872cde31ceb6dd.js   13.3 KiB       7  [emitted] [immutable]  pages/docs/_slug/index …
Run Code Online (Sandbox Code Playgroud)

shell continuous-deployment pm2 nuxt.js github-actions

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

Puppeteer 无法在 GitHub 操作中启动

我正在尝试使用 Puppeteer 测试此 Chrome 扩展程序。我的测试在本地运行良好,但在 GitHub Actions 中不起作用。我怀疑问题出在运行 Puppeteer 的 GitHub Actions 环境上,但我不太确定根本问题是什么。

我尝试了 all linux-latestwindows-latestmacos-latestforconfig.ymlruns-on选项,他们给了我不同的错误消息:

linux-latest

    Failed to launch the browser process!
    [2801:2801:0606/033446.894051:ERROR:browser_main_loop.cc(1468)] Unable to open X display.
    Received signal 11 SEGV_MAPERR 000000000000
    #0 0x5617d755b399 base::debug::CollectStackTrace()
    #1 0x5617d74bc2a3 base::debug::StackTrace::StackTrace()
    #2 0x5617d755af35 base::debug::(anonymous namespace)::StackDumpSignalHandler()
    #3 0x7efd5b4f6890 (/lib/x86_64-linux-gnu/libpthread-2.27.so+0x1288f)
    #4 0x5617d9f51f38 ChromeBrowserMainExtraPartsViewsLinux::~ChromeBrowserMainExtraPartsViewsLinux()
    #5 0x5617d7103140 ChromeBrowserMainParts::~ChromeBrowserMainParts()
    #6 0x5617d7102cfe ChromeBrowserMainPartsLinux::~ChromeBrowserMainPartsLinux()
    #7 0x5617d57fc1bf content::BrowserMainLoop::~BrowserMainLoop()
    #8 0x5617d57fc2ce content::BrowserMainLoop::~BrowserMainLoop()
    #9 0x5617d5800c2b content::BrowserMainRunnerImpl::Shutdown()
    #10 0x5617d5800738 content::BrowserMainRunnerImpl::~BrowserMainRunnerImpl()
    #11 0x5617d57fbd30 content::BrowserMain() …
Run Code Online (Sandbox Code Playgroud)

google-chrome-extension puppeteer github-actions

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