从GitHub动作推到起源

时间:2019-09-13 09:57:17

标签: git docker github github-actions

我正在尝试将其从GitHub操作推送到mysql> SELECT COUNT(*) FROM transaction; +----------+ | COUNT(*) | +----------+ | 4569880 | +----------+ 1 row in set (1 min 37.88 sec) mysql> SELECT COUNT(*) FROM transaction; +----------+ | count(*) | +----------+ | 4569880 | +----------+ 1 row in set (1.44 sec) mysql> SELECT COUNT(*) FROM communication; +----------+ | count(*) | +----------+ | 2821486 | +----------+ 1 row in set (2 min 19.28 sec) 远程。我的行动逻辑是:

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

脚本为:

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 Docker容器运行此脚本:

alpine:3.10

第一步工作正常(检出和合并),但是由于错误,操作未能将合并推送到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"]

  

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

似乎GitHub动作Docker容器未配置为推送到GitHub。如何配置?是否可以使用GitHub提供的某些env veraibles或某些挂载的文件(如origin路径中的文件)?

2 个答案:

答案 0 :(得分:6)

您可以在存储库URL上使用secrets.GITHUB_TOKEN作为密码。因此,您可以将其添加到git push行之前:

git remote set-url --push origin https://your_username:$GITHUB_TOKEN@github.com/your/repo

这假定您已经将GITHUB_TOKEN机密作为环境变量传递给脚本。如果不是,则添加:

env:
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

进入工作流程步骤。

答案 1 :(得分:4)

actions / checkout @ 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事件来触发其他工作流,请使用范围为Personal Access Tokenrepo

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

actions / checkout @ 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)以替换默认的合并提交。

重要:如果除了以下工作流程之外还进行其他拉取请求检查,则必须使用Personal Access Token而不是默认的GITHUB_TOKEN。 这是由于GitHub Actions故意施加的限制,即工作流程(例如push)引发的事件无法触发进一步的工作流程运行。 这是为了防止意外的“无限循环”情况,并且是一种防止滥用的措施。 使用repo范围为Personal Access Tokenthis GitHub issue是一种公认​​的解决方法。有关解决方法的更多详细信息,请参见GitHub Actions: How to Automate Code Formatting in Pull Requests

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工作流程中推入来源的更多示例,请参阅此博客文章{{3}}。