我在 GitHub 上有两个私有存储库。
mygh/my-action
mygh/my-code
Run Code Online (Sandbox Code Playgroud)
我正在尝试运行mygh/my-code使用自定义操作的工作流程mygh/my-action,但 GitHub Actions 失败并出现以下错误:
Failed to resolve action download info. Error: Unable to resolve action `mygh/my-action@main`, repository not found
Retrying in 12.717 seconds
Failed to resolve action download info. Error: Unable to resolve action `mygh/my-action@main`, repository not found
Retrying in 11.214 seconds
Error: Unable to resolve action `mygh/my-action@main`, repository not found
Run Code Online (Sandbox Code Playgroud) 我想在我们的存储库中使用此 GitHub 操作来检查 PR。我们在同一存储库中创建带有主分支的拉取请求,在该拉取请求中处理反馈/反馈合并,然后合并到主控中。我正在使用pull_request事件触发器来触发操作。
我收到此错误:
错误:需要参数令牌或 opts.auth
当我在虚拟 PR 上测试该操作时,从这样的评论中我认为操作中的这一行没有获得GITHUB_TOKEN.
从这篇GitHub 安全实验室帖子中,我看到:
通过 pull_request_target 触发的工作流具有对目标存储库的写入权限。他们还可以访问目标存储库机密。对于来自同一存储库中的分支(但不是来自外部分支)的pull_request 触发的工作流也是如此。后者背后的原因是,如果创建 PR 的用户已经拥有目标存储库的写入权限,则共享存储库机密是安全的。
由此,我的猜测是pull_request应该能够访问该令牌。
我在我们的设置中遗漏了什么吗?
我有以下 github 工作流程定义:
name: Build
on:
pull_request:
types: [ opened, edited, synchronize ]
paths-ignore:
- '**.md'
push:
branches:
- main
jobs:
get-job:
name: My job
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Say hello
run: |
echo Hello!
Run Code Online (Sandbox Code Playgroud)
我已阅读文档和其他来源,所有这些都将同步类型描述为我需要使用的类型,以确保 PR 中的每个新更改都会触发工作流程。为什么会间歇性地工作?
为了简化新版本的发布,我想使用 GitHub-Actions 来构建我的项目。这应该通过创建发布草案来触发。
基本上,工作流程应如下所示:
当应创建新版本时,会(手动)创建草稿,其中包含正确的tag、name和body。保存草稿后,该操作应该接管并在当前状态下构建项目,然后将构建的文件添加到发布草稿中,最后发布它。
我不希望它在草稿发布时触发,因为它已经可用,甚至在操作完成构建应该发布的真实文件之前。
我尝试使用releasewith的所有触发器
on: # When to trigger this action
release: # trigger on all release-events
workflow_dispatch: # allow manual triggering
Run Code Online (Sandbox Code Playgroud)
然而,这似乎不会在保存草稿时触发,只有在发布时才会触发。
有没有什么方法可以在不发布版本的情况下触发此工作流程,而只能通过创建草稿来触发?
我希望当我们将新标签推送到主存储库时,运行所有测试的 GitHub 操作不会执行,因为当我们合并新分支时,我们之前执行此操作,而当我们推送标签以创建新版本时,此操作会执行再次。
现在这个行动从这个开始
name: Build and Test
on: push
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,这将在我们所做的每次推送中执行,我想更改为仅当我们推送提交(没有标签)时才执行此操作。我的近似解决方案是这样的,但我不确定
name: Build and Test
on:
push:
branches:
- '*'
tags-ignore:
- '*'
Run Code Online (Sandbox Code Playgroud) 在此 Github Actions 部署脚本示例中,作者将构建和部署分为不同的作业。
鉴于:
分成两个作业而不是简单地在部署作业中插入构建步骤有什么好处?
这是示例:
name: Build and Deploy
on:
push:
branches:
- master
jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- name: Checkout Repo
uses: actions/checkout@master
- name: Install Dependencies
run: npm install
- name: Build
run: npm run build-prod
- name: Archive Production Artifact
uses: actions/upload-artifact@master
with:
name: dist
path: dist
deploy:
name: Deploy
needs: build
runs-on: ubuntu-latest
steps:
- name: Checkout Repo
uses: actions/checkout@master
- name: Download Artifact
uses: actions/download-artifact@master …Run Code Online (Sandbox Code Playgroud) 我想在 GitHub 操作中使用纯解决方案来增加包的版本。我不想使用 GitHub 市场中的任何现有操作,例如“gh-action-bump-version”。我有这个工作流程,它将增加版本并创建标签。
name: Version Increment
on:
push:
branches:
- main
tags-ignore:
- v*
jobs:
version:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
token: ${{ secrets.ACCESS_TOKEN }}
- run: git config user.email "$GITHUB_ACTOR@users.noreply.github.com"
- run: git config user.name "$GITHUB_ACTOR"
- run: npm version minor -m "v%s"
- run: VERSION=$(node -p "require('./package.json').version")
- run: git tag ${VERSION}
- run: git push origin --tags
- run: git push origin --follow-tags
Run Code Online (Sandbox Code Playgroud)
它有效,但由于最后一行,它也会导致操作的循环运行。我知道我可以使用像“[RELEASE]”这样的自定义消息,并放置一个“if”条件并跳过这些提交。但我的问题是,是否有更好的解决方案可以从此操作中跳过这些提交并且不使用“if”条件?因为“标签忽略”显然不起作用。
假设我有一个这样的拉取请求。
name: Workflow
on:
pull_request:
paths:
- '**/*.h'
- '**/*.c'
Run Code Online (Sandbox Code Playgroud)
我master通过将 GitHub Actions 配置为要求在拉取请求可合并之前通过状态检查来保护分支。
现在我更新自述文件。我打开了针对 的拉取请求master。拉取请求是不可合并的,因为状态检查永远不会返回成功,也不会返回失败。
建议?
目标
我已手动将开源库发布到registry.npmjs.org,并且我希望将来的版本能够使用GitHub Actions 自动发布。我之前没有 GitHub 操作的经验。
到目前为止我做了什么
我已将标准 GitHub 操作放入 GitHub 为此目的提供的存储库中(未更改)。在最后一行中,它从npmjs.com获取自动化令牌,我已在存储库上将其定义为环境机密NPM_TOKEN。它显示在存储库的秘密页面中。
我面临的错误
Run npm publish
...
npm ERR! code ENEEDAUTH
npm ERR! need auth This command requires you to be logged in.
npm ERR! need auth You need to authorize this machine using `npm adduser`
npm ERR! A complete log of this run can be found in:
npm ERR! /home/runner/.npm/_logs/2022-01-08T00_20_52_834Z-debug.log
Error: Process completed with exit code 1.
Run Code Online (Sandbox Code Playgroud)
尽管进行了大量的网络搜索,但我还是不明白
我正在使用GitHub 操作模板的 Amazon ECS“部署任务定义”操作来部署我的应用程序。有时会卡在这一步:
部署 Amazon ECS 任务定义
在终止之前,它可能会卡住很长时间(30 - 60 分钟)。我可以登录 ECS 中的 AWS 控制台并查看它创建的任务定义,然后从新创建的任务定义手动运行新任务。结果很好,因为我看到任务成功运行。
当我查看日志以了解为什么它首先卡住时,我看到了错误消息,例如:
(service myService) 无法放置任务,因为没有容器实例满足其所有要求。最接近的匹配(容器实例 id23244214)没有足够的可用 CPU 单元。
(service myService) 无法放置任务,因为没有容器实例满足其所有要求。最接近的匹配(容器实例 id23244214)没有足够的可用内存。
我的 EC2 实例上有 2 个 vCPU 和 2 (GiB) 内存,并且我的任务定义没有超出该限制。由于我可以在 ECS 仪表板中创建任务,因此 EC2 实例似乎并不缺乏内存或 VCPU。
最后,当我看到类似上面两条的错误消息时,我尝试通过 GitHub 再次重新部署。GitHub Action 正常传递所有作业,但它再次卡在任务定义步骤上。然后,在 Amazon ECS 控制台中最后一次内存/CPU 分配不足后,我停止接收任何事件日志。
它最终失败并显示错误消息:
错误:资源未处于 servicesStable 状态
这是我的任务
{
"ipcMode": null,
"executionRoleArn": null,
"containerDefinitions": [
{
"dnsSearchDomains": null,
"environmentFiles": null,
"logConfiguration": null,
"entryPoint": null,
"portMappings": [
{
"hostPort": …Run Code Online (Sandbox Code Playgroud) github-actions ×10
github ×3
amazon-ec2 ×1
amazon-ecs ×1
firebase ×1
git ×1
github-api ×1
npm-publish ×1
pull-request ×1