我一直在 GitHub Actions 中快速了解 Docker 的使用情况,并且不断运行如下代码:
docker run --rm -t \
-v "/home/runner":"/home/runner" \
-v "/home/runner/work/_temp/_github_home":"/github/home" \
-v "/home/runner/work/_temp/_github_workflow":"/github/workflow" \
-v "${{ github.workspace }}":"/github/workspace" \
...
Run Code Online (Sandbox Code Playgroud)
我很好奇安装所有这些卷的动机是什么。我得到了/github/workspace一个,可以访问 Docker 容器内的所有存储库文件,但是这些文件有什么用呢?
/home/runner/home/runner/work/_temp/_github_home/home/runner/work/_temp/_github_workflow“你说什么,你在哪里看到的?”
然而,我找不到任何有关您为什么要这样做的文档。
我正在尝试使用类似于以下的结构来组织我的工作流程工件(在自托管运行器上):
c:\github\artifacts\{org}\{repo}\{runid}
Run Code Online (Sandbox Code Playgroud)
我们企业中的不同组织可以拥有同名的存储库,因此我希望能够按组织名称进行组织。
到目前为止我有这个:
c:\github\artifacts\{org}\{${{ github.event.repository.name }}\${{ github.run_id }}\
Run Code Online (Sandbox Code Playgroud)
如何确定组织名称?
在单个 Github 操作脚本中,我希望区分 2 个不同路径/目录上的提交。下面的脚本本质上是我想要做的。我不确定的是如何确定表达式中承诺的路径。现在我有github.event.path但这可能是错误的。
on:
push:
branches: [ master ]
paths:
- 'Path1/**'
- 'Path2/**'
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: do something when Path1 directory has a commit
if: github.event.path == 'Path1/**'
run: <do something>
- name: do something when Path2 directory has a commit
if: github.event.path == 'Path2/**'
run: <do something else>
Run Code Online (Sandbox Code Playgroud) 我正在 Windows 运行器上使用 GitHub 操作步骤。我尝试运行的可执行文件的要求之一是它不能以管理员身份运行。
有什么方法可以创建并成为 Windows 运行者上操作使用的默认管理员帐户的不同用户吗?
我想使用 Github Action 来归档我的 swift 项目。
这是 Github Action yaml:
name: macos_deploy
on:
push:
# tags: [ release* ]
jobs:
macos_deploy:
runs-on: self-hosted
steps:
- name: "Checkout Project"
uses: actions/checkout@v2
- name: "Import Certificate: Development"
uses: devbotsxyz/import-signing-certificate@v1
with:
certificate-data: ${{ secrets.SIGNING_CERTIFICATE_P12_DATA }}
certificate-passphrase: ${{ secrets.SIGNING_CERTIFICATE_PASSWORD }}
keychain-password: ${{ secrets.KEYCHAIN_PASSWORD }}
- name: "Build & Archive"
uses: devbotsxyz/xcode-archive@v1
Run Code Online (Sandbox Code Playgroud)
当我在 Github 托管的运行器上运行它时,它将挂在此处:
/usr/bin/codesign --force --sign XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -o runtime --preserve-metadata\=identifier,entitlements,flags --generate-entitlement-der /Users/runner/Library/Developer/Xcode/DerivedData/XXXXX-gfxcztatpmvmaqcfrbtnfpexcjrn/Build/Intermediates.noindex/ArchiveIntermediates/XXXXX/InstallationBuildProductsLocation/Applications/XXXXX.app/Contents/Frameworks/Sparkle.framework/Versions/B
/Users/runner/Library/Developer/Xcode/DerivedData/XXXXX-gfxcztatpmvmaqcfrbtnfpexcjrn/Build/Intermediates.noindex/ArchiveIntermediates/XXXXX/InstallationBuildProductsLocation/Applications/XXXXX.app/Contents/Frameworks/Sparkle.framework/Versions/B: replacing existing signature
Run Code Online (Sandbox Code Playgroud)
所以我尝试设置一个自托管运行器来调试。
现在我发现它需要我提供钥匙串的密码。
如何避免这个对话框?我想我已经在这一步提供了密码Import Certificate: Development。 …
我指的是官方github指南来设置自动部署到ECS https://docs.github.com/en/actions/deployment/deploying-to-your-cloud-provider/deploying-to-amazon-elastic-容器服务
我的deploy.yaml工作流程看起来与上面链接中的工作流程相同,只是替换了正确的环境变量
我已完成所需的所有步骤,并已在 AWS 上启动并运行所有必要的基础设施。但是当工作流程被触发时,它总是无法将 docker 镜像推送到 ECR。重试几次后,退出
EOF
Error: Process completed with exit code 1.
Run Code Online (Sandbox Code Playgroud)
从我在 github 操作上看到的输出,我相信登录 ecr 步骤成功,并且还可以确认它正在推送到正确的 ECR 存储库,但由于某种原因推送失败。
我已经将图像推送到本地存储库并且它可以工作,所以我认为 AWS 方面没有任何问题。
环境表达式通常直接赋值,如下例所示
- name: set up env var
env:
TAG: v1.2.3
run: echo $TAG
Run Code Online (Sandbox Code Playgroud)
但是如何从 shell 脚本评估中获取值呢?例如,在我的终端中,我可以通过以下方式获取当前标签git describe --exact-match --tags $(git log -n1 --pretty='%h')
但是当我尝试将此脚本放入环境中时,如下所示
- name: set up env var
env:
TAG: $(git describe --exact-match --tags $(git log -n1 --pretty='%h'))
run: echo $TAG
Run Code Online (Sandbox Code Playgroud)
打印出的 echo$(git describe --exact-match --tags $(git log -n1 --pretty='%h'))意味着它不被计算而是被视为字符串。
如何获取 的值git describe --exact-match --tags $(git log -n1 --pretty='%h')并将其分配给环境变量TAG?
我无法让 Github 工作流功能排除正常工作的路径,并且在堆栈溢出上找不到类似的问题。最相似的情况是Github 工作流程不会在推送基于路径的过滤时触发,但它对我没有帮助。
我的 PR 工作流程如下:
name: Build For PRs
on:
pull_request:
types: [opened, synchronize, ready_for_review]
paths:
- 'src/**'
- '!src/abc/**'
- '!src/def/**'
- '!src/ghi/**'
- '!src/docker-compose*.yml'
- '!**.md'
Run Code Online (Sandbox Code Playgroud)
我希望它在“src”下的任何文件发生更改时在 PR 上运行,除非负过滤器之一匹配。
即使更改 .md 文件也会触发此 WF。我怎样才能实现上面的逻辑呢?
我在尝试启动 Github 操作工作流程时陷入困境。Flutter项目有一个自定义包的依赖。我在 Github 存储库中有这个自定义包。这是我在 pubspec.yaml 中设置此依赖项的方式:
xxxx_package:
git:
url: git@github.com:USER_NAME/xxxx_package.git
ref: develop
Run Code Online (Sandbox Code Playgroud)
如果我启动flutter pub get命令,它就会成功结束,我可以毫无问题地构建和执行应用程序。
但是当我向 Github 发送推送并启动工作流程时,该过程结束时出现以下错误:
Running "flutter pub get" in Project-Flutter...
Git error. Command: `git clone --mirror git@github.com:xxx/xxxx_package.git /home/runner/.pub-cache/git/cache/xxxx_package-123456789`
stdout:
stderr: Cloning into bare repository '/home/runner/.pub-cache/git/cache/xxxx_package-123456789'...
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.
Run Code Online (Sandbox Code Playgroud)
这是我的操作工作流程文件:
name: Check merge
on:
push:
branches: [ main, develop ]
pull_request:
branches: [main, develop]
workflow_dispatch:
jobs:
build:
name: flutter environment
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2 …Run Code Online (Sandbox Code Playgroud) github-actions ×10
docker ×2
amazon-ecr ×1
flutter ×1
github ×1
github-actions-self-hosted-runners ×1
github-api ×1
keychain ×1
macos ×1
postgresql ×1
psexec ×1
runas ×1
windows ×1