当前位置: 首页 > 面试题库 >

从GitHub动作推到起源

暴辰龙
2023-03-14
问题内容

我正在尝试origin从GitHub动作推送到远程。我的操作逻辑是:

  • 处理pull_request_review事件并按评论消息过滤
  • 结帐到母版,合并PR分支,运行一些检查并将其推送到 origin

脚本是:

if [[ "${GITHUB_EVENT_NAME}" != "pull_request_review" ]]; then
  echo "unsupported event: ${GITHUB_EVENT_NAME}"
  exit 1
fi

user=$(jq -r .review.user.login ${GITHUB_EVENT_PATH})
cmd=$(jq -r .review.body ${GITHUB_EVENT_PATH})
echo "reviewer is ${user}, command is ${cmd}"

if [[ "${cmd}" == "merge" ]]; then
  head=$(jq -r .pull_request.head.ref ${GITHUB_EVENT_PATH})
  git config user.email test@test.com
  git config user.name test
  git checkout -B _tmp origin/${head}
  git checkout -B master origin/master
  git merge --no-ff _tmp
  git push origin master
fi

我正在从alpine:3.10Docker容器运行此脚本:

FROM alpine:3.10

LABEL "com.github.actions.name"="Hello world action"
LABEL "com.github.actions.icon"="shield"
LABEL "com.github.actions.color"="green"

WORKDIR /app
COPY action.sh action.sh
RUN apk --update add bash git jq
CMD ["bash", "/app/action.sh"]

第一步工作正常(签出和合并),但是origin由于错误,操作无法将合并推送到:

+ git push origin master
致命:无法读取“ https://github.com ”的用户名:无此设备或地址

看起来GitHub动作Docker容器未配置为推送到GitHub。我该如何配置?是否可以使用GitHub提供的某些env变量或某些挂载的文件(如/github/*path中的文件)?


问题答案:

动作/结帐@ v2

签出的版本2解决了分离的HEAD状态问题,并简化了向原点的推送。

name: Push commit
on: push
jobs:
  report:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Create report file
        run: date +%s > report.txt
      - name: Commit report
        run: |
          git config --global user.name 'Your Name'
          git config --global user.email 'your-username@users.noreply.github.com'
          git commit -am "Automated report"
          git push

如果您需要push事件来触发其他工作流程,请使用repo范围限定的Personal Access
Token

      - uses: actions/checkout@v2
        with:
          token: ${{ secrets.PAT }}

动作/结帐@ v1(原始答案)

在@rmunn的出色答案中添加更多详细信息。问题是该actions/checkout@v1操作使git存储库处于分离的HEAD状态。请参阅此问题以获取更多详细信息:https
:
//github.com/actions/checkout/issues/6

这是一个完整的示例,以演示如何使已签出的存储库进入可用状态并推送到远程服务器。

name: Push commit
on: push
jobs:
  report:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - name: Create report file
        run: date +%s > report.txt
      - name: Commit report
        run: |
          git config --global user.name 'Your Name'
          git config --global user.email 'your-username@users.noreply.github.com'
          git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/$GITHUB_REPOSITORY
          git checkout "${GITHUB_REF:11}"
          git commit -am "Automated report"
          git push

要包括未跟踪的(新)文件,请更改工作流程以使用以下内容。

          git add -A
          git commit -m "Automated report"

以上工作流程应适用于大多数事件。对于on: pull_request工作流,GITHUB_HEAD_REF应检出合并分支()以替换默认的合并提交。

重要提示:
如果除了以下工作流程之外还进行其他拉取请求检查,则必须使用个人访问令牌代替默认访问令牌GITHUB_TOKEN。这是由于GitHub
Actions故意施加的限制,由工作流程引发的事件(例如push)无法触发进一步的工作流程运行。这是为了防止意外的“无限循环”情况,并且是一种防止滥用的措施。使用repo范围限定的个人访问令牌是一种公认​​的解决方法。有关解决方法的更多详细信息,请参见此GitHub问题。

name: Push commit on pull request
on: pull_request
jobs:
  report:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
        with:
          ref: ${{ github.head_ref }}
      - name: Create report file
        run: date +%s > report.txt
      - name: Commit report
        run: |
          git config --global user.name 'Your Name'
          git config --global user.email 'your-username@users.noreply.github.com'
          git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}
          git commit -am "Automated report"
          git push

有关在on: pull_request工作流期间推送到原点的更多示例,请参阅此博客文章GitHub Actions:如何在Pull
Requests中自动执行代码格式设置。



 类似资料:
  • 我有一个Github repo项目,使用Github操作和一个docker文件来构建SpringBoot Java项目 我想从Github repo下载来自Github repo的定制工件包,并能够将工件上传到其中。 所以我按照配置Apache Maven用于GitHub包的链接,将该部分添加到settings.xml文件中: 为了从dockerfile构建中发布包,我在pom.xml中添加了以下

  • 问题内容: Jenkins在本地主机上运行。我的存储库在GitHub中。我可以 选择“将更改推送到GitHub时构建”。 当我单击“立即构建”时,构建成功完成,那里没有问题。但是, 当将代码提交到我的存储库时,不会自动构建。我可以 从我的系统访问GitHub,因为该存储库是公共的,我相信甚至 Jenkins也应该能够检测到它。我知道有一个轮询选项,但是我 希望Jenkins在存储库中检测到更改时进

  • 我想从公共repo的GitHub操作部署到GitHub包注册表。 我有一个工作流的yml文件: 我使用Leiningen构建项目并生成POM文件。然后我想使用Maven将工件部署到GitHub包注册表。 命令失败(我已将个人信息替换为): 我看到身份验证失败了。我也尝试过这一步,但效果相同: 我不想提供用户名/密码或令牌,因为这是一个公共存储库。有什么办法可以出版吗? 谢谢!

  • 问题内容: 我正在尝试运行目标,并且在推动之后将其挂起。知道我做错了什么吗? 以下是我的pom.xml的SCM部分: 以下是我的.git / config: 这是git show origin的结果: 问题答案: 考虑到的来源,这意味着以某种方式,没有为maven脚本使用的本地Git存储库定义任何远程对象。 如本博文所述,maven配置并非全部。 在指定maven scm参数之前,仍然需要A :

  • GitHub允许你配置你的库,让用户无法强制推送至master,但是有没有办法完全防止推送至master?我希望这样做,以便向master添加提交的唯一方式是通过GitHub pull请求UI。

  • 每当我试图从命令行将更改推送到远程存储库时,我都会收到以下错误: (我已经替换了org和repo名称,但它们绝对是正确的名称)。 我已检查是否具有对存储库的写入权限。我可以通过网站创建分支和写入文件,并在本地将这些更改拉回来。 我正在使用Git Credential Manager for Windows(GCM)使用github进行身份验证,gitconfig中有以下内容: 我运行的是Windo