使用 github-action 复制文件

问题描述 投票:0回答:2

我正在尝试编写一个 GitHub 操作,将我的存储库中的文件副本复制到存储库中的不同子目录中。这是我的目录结构(复制文件之前)

my_project
  |_ .github
  |     |_ workflows
  |          |_ run_tests.yml
  |          |_ copy_file.yml
  |_ tests
  |    |_ testthat
  |         |_ test1.R
  |         |_ test2.R
  |_ my_file.json
  |_ copyfile.sh

这就是我希望复制文件后的文件结构

my_project
  |_ .github
  |     |_ workflows
  |          |_ run_tests.yml
  |          |_ copy_file.yml
  |_ tests
  |    |_ testthat
  |    |    |_ test1.R
  |    |    |_ test2.R
  |    |_ copy_of_my_file.json
  |_ my_file.json
  |_ copyfile.sh

所以基本上,我的 GitHub 操作应该制作

my_file.json
的副本,命名为
copy_of_my_file.json
并将其放置在
tests
子目录中。我用以下内容构建了一个
bash
脚本

#!/bin/bash
cp my_file.json tests/copy_of_my_file.json

在本地,我运行

chmod u+x copyfile.sh
,然后运行
bash copyfile.sh
,文件确实被复制了。我的
copy_file.yml
工作流程如下:

name: Copy my_file.json to tests subdirectory
on: [push, pull_request, workflow_dispatch]
jobs:
  run:
    runs-on: [ubuntu-latest]
    steps:
    - name: Checkout 🛎️
      uses: actions/checkout@v2

    - name: Make copy of my_file.json 📚
      run: |
        chmod u+x "${GITHUB_WORKSPACE}/copyfile.sh"
        bash "${GITHUB_WORKSPACE}/copyfile.sh"

该操作运行时没有错误,但文件未被复制。我尝试了 GitHub Marketplace 中的其他操作,但没有成功。我还尝试将操作的

run
更改为简单的
cp my_file.json tests/copy_of_my_file.json
但它也不起作用。

bash yaml copy github-actions
2个回答
1
投票

问题是文件需要提交到存储库。人们可以编写自己的提交操作或从GitHub Actions Marketplace中选择。

在后台,操作在 GitHub 服务器上运行。签出操作从存储库中获取文件。之后所做的任何事情都发生在该服务器中。因此,任何需要“保存”的内容都必须推送到存储库或生成操作工件。


0
投票

你好!!



幸运的是我知道问题是什么以及如何解决:)

首先你知道你想要什么“my_file json”?
  • 复制到“GuestMachine”并在那台机器上执行它们??
  • 每次更改都会自动复制到您的“GitHubReporsitory”?
所以,我对这两个问题都有解决方案。我们走吧。
首先,如果您想在您的“ActionGustLinuxMachine”上复制“my_file json”,您不需要使用“chmod”命令,只需使用“sudo cp”命令......是的!在 .yml 操作文件上使用 sudo 并在 .yml 文件上使用“权限:内容:读取”,这就是我使用“sudo cp my_file json 文件夹”命令的项目,并且可以正常工作,请完全使用该命令NO!!“cp my_file json文件夹/my_file json”[不正确!!](正如我之前所见),您可以使用Linux“dir”命令来查看结果。
现在,如果您想达到第二个答案,那是可能的,所以在向您解释解决方案之前,我必须向您解释“GuestMachine”,无论操作系统如何(Linux、Windows、“Nginx”),它都只是一个触发操作后,将代码从存储库复制(自动)到“WorkMachine”,然后执行 .yml(指令),最后确定 .yml 代码的执行成功或失败(无论)
ALL该机器的信息将被删除,因为该机器需要在世界的另一个地方用于另一个操作,“ZoombieMachine”是链接到池(BareMetal)的另一个实例(VM)。
您有两种方法可以做到这一点,第一种方法更复杂且更快,第二种方法更简单且速度较慢。

首先使用 .yml 命令在
“GuestMachine” 上安装 GitHub,并使用“GitHubActionSecret”通过 GustMachineShell 进行身份验证并克隆您的存储库(听起来多余,但很有必要),然后使用我拥有的“sudo cp 命令”提到的,并使用它从“my_file json”创建一个副本,然后创建一个提交并推送它们:D。
第二个解决方案需要更多知识,您必须在 .yml 上使用 GitHubCLI_API 并在@checkout 中使用大权限,请参阅[如何授予它][1],然后使用它来创建提交并拉取[SeeTheDocumentationHere][2]。

我希望我对你有帮助,如果对你有帮助,请投票;)。
© www.soinside.com 2019 - 2024. All rights reserved.