Github 操作 - 错误:进程已完成,退出代码为 1

Ann*_*lee 2 git bash github github-actions

我正在尝试设置 github 操作来部署我的应用程序。

bash启动部署过程的脚本如下所示:

#!/bin/sh
set -e

vendor/bin/phpunit

(git push) || true

git checkout production
git merge master

git push origin production

git checkout master
Run Code Online (Sandbox Code Playgroud)

执行上述脚本时,我得到:

在此处输入图片说明

我的workflows/main.yml文件如下所示:

name: CD

on:
  push:
    branches: [ production ]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          token: ${{ secrets.PUSH_TOKEN }}
#      - name: Set up Node
#       uses: actions/setup-node@v1
#        with:
#          node-version: '12.x'
#      - run: npm install
#      - run: npm run production
      - name: Commit built assets
        run: |
          git config --local user.email "action@github.com"
          git config --local user.name "GitHub Action"
          git checkout -B deploy
          git add -f public/
          git commit -m "Build front-end assets"
          git push -f origin deploy
      - name: Deploy to production
        uses: appleboy/ssh-action@master
        with:
          username: root
          host: xx.xx.xxx.xxx
          password: ${{ secrets.SSH_PASSWORD }}
          script: 'cd /var/www/myProject && ./server_deploy.sh'

Run Code Online (Sandbox Code Playgroud)

运行脚本时,我得到以下原始日志:

2021-03-14T16:04:06.7573174Z ##[section]Starting: Request a runner to run this job
2021-03-14T16:04:07.1344029Z Can't find any online and idle self-hosted runner in current repository that matches the required labels: 'ubuntu-latest'
2021-03-14T16:04:07.1344097Z Can't find any online and idle self-hosted runner in current repository's account/organization that matches the required labels: 'ubuntu-latest'
2021-03-14T16:04:07.1344652Z Found online and idle hosted runner in current repository's account/organization that matches the required labels: 'ubuntu-latest'
2021-03-14T16:04:07.2661405Z ##[section]Finishing: Request a runner to run this job
2021-03-14T16:04:17.0975920Z Current runner version: '2.277.1'
2021-03-14T16:04:17.9082004Z ##[group]Operating System
2021-03-14T16:04:17.9083391Z Ubuntu
2021-03-14T16:04:17.9084015Z 20.04.2
2021-03-14T16:04:17.9084509Z LTS
2021-03-14T16:04:17.9085154Z ##[endgroup]
2021-03-14T16:04:17.9085790Z ##[group]Virtual Environment
2021-03-14T16:04:17.9086576Z Environment: ubuntu-20.04
2021-03-14T16:04:17.9087226Z Version: 20210302.0
2021-03-14T16:04:17.9088413Z Included Software: https://github.com/actions/virtual-environments/blob/ubuntu20/20210302.0/images/linux/Ubuntu2004-README.md
2021-03-14T16:04:17.9090008Z Image Release: https://github.com/actions/virtual-environments/releases/tag/ubuntu20%2F
2021-03-14T16:04:17.9091225Z ##[endgroup]
2021-03-14T16:04:17.9093732Z ##[group]GITHUB_TOKEN Permissions
2021-03-14T16:04:17.9095423Z Actions: write
2021-03-14T16:04:17.9096121Z Checks: write
2021-03-14T16:04:17.9096752Z Contents: write
2021-03-14T16:04:17.9097367Z Deployments: write
2021-03-14T16:04:17.9098205Z Issues: write
2021-03-14T16:04:17.9098869Z Metadata: read
2021-03-14T16:04:17.9099572Z OrganizationPackages: write
2021-03-14T16:04:17.9100326Z Packages: write
2021-03-14T16:04:17.9100966Z PullRequests: write
2021-03-14T16:04:17.9101747Z RepositoryProjects: write
2021-03-14T16:04:17.9102476Z SecurityEvents: write
2021-03-14T16:04:17.9103267Z Statuses: write
2021-03-14T16:04:17.9103974Z ##[endgroup]
2021-03-14T16:04:17.9108171Z Prepare workflow directory
2021-03-14T16:04:18.3861957Z Prepare all required actions
2021-03-14T16:04:18.3875377Z Getting action download info
2021-03-14T16:04:18.7415606Z Download action repository 'actions/checkout@v2'
2021-03-14T16:04:19.4196162Z Download action repository 'appleboy/ssh-action@master'
2021-03-14T16:04:20.1340765Z ##[group]Build container for action use: '/home/runner/work/_actions/appleboy/ssh-action/master/Dockerfile'.
2021-03-14T16:04:20.1449431Z ##[command]/usr/bin/docker build -t 5588e4:46e0c05d2f1c4fbf93b7f69ca6a2f1b5 -f "/home/runner/work/_actions/appleboy/ssh-action/master/Dockerfile" "/home/runner/work/_actions/appleboy/ssh-action/master"
2021-03-14T16:04:21.6962547Z Sending build context to Docker daemon  293.9kB
2021-03-14T16:04:21.6963066Z 
2021-03-14T16:04:21.6963632Z Step 1/4 : FROM appleboy/drone-ssh:1.6.3-linux-amd64
2021-03-14T16:04:21.6964381Z 1.6.3-linux-amd64: Pulling from appleboy/drone-ssh
2021-03-14T16:04:21.6965036Z 188c0c94c7c5: Pulling fs layer
2021-03-14T16:04:21.6965576Z 66fca843054b: Pulling fs layer
2021-03-14T16:04:21.6966101Z f62e9573bab1: Pulling fs layer
2021-03-14T16:04:21.6966632Z 06a0f34100cd: Pulling fs layer
2021-03-14T16:04:21.6967110Z 06a0f34100cd: Waiting
2021-03-14T16:04:21.6967633Z f62e9573bab1: Verifying Checksum
2021-03-14T16:04:21.6968295Z f62e9573bab1: Download complete
2021-03-14T16:04:21.6968871Z 66fca843054b: Verifying Checksum
2021-03-14T16:04:21.6969544Z 66fca843054b: Download complete
2021-03-14T16:04:21.6970079Z 188c0c94c7c5: Verifying Checksum
2021-03-14T16:04:21.6970589Z 188c0c94c7c5: Download complete
2021-03-14T16:04:21.6971347Z 06a0f34100cd: Verifying Checksum
2021-03-14T16:04:21.6971878Z 06a0f34100cd: Download complete
2021-03-14T16:04:22.0484952Z 188c0c94c7c5: Pull complete
2021-03-14T16:04:22.2702074Z 66fca843054b: Pull complete
2021-03-14T16:04:22.3773889Z f62e9573bab1: Pull complete
2021-03-14T16:04:22.6271473Z 06a0f34100cd: Pull complete
2021-03-14T16:04:22.6379226Z Digest: sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaa
2021-03-14T16:04:22.6402600Z Status: Downloaded newer image for appleboy/drone-ssh:1.6.3-linux-amd64
2021-03-14T16:04:22.6418359Z  ---> 47f94d42e479
2021-03-14T16:04:22.6422631Z Step 2/4 : COPY entrypoint.sh /entrypoint.sh
2021-03-14T16:04:23.2992272Z  ---> 894dff86e37f
2021-03-14T16:04:23.3137154Z Step 3/4 : RUN chmod +x /entrypoint.sh
2021-03-14T16:04:23.3492501Z  ---> Running in 8b348a5718bd
2021-03-14T16:04:25.0149456Z Removing intermediate container 8b348a5718bd
2021-03-14T16:04:25.0167277Z  ---> 2bc40f78951d
2021-03-14T16:04:25.0168110Z Step 4/4 : ENTRYPOINT ["/entrypoint.sh"]
2021-03-14T16:04:25.0374209Z  ---> Running in be0a69eed1dc
2021-03-14T16:04:26.0155734Z Removing intermediate container be0a69eed1dc
2021-03-14T16:04:26.0157218Z  ---> e08d3462082b
2021-03-14T16:04:26.0218123Z Successfully built e08d3462082b
2021-03-14T16:04:26.0355661Z Successfully tagged 5588e4:46e0c05d2f1c4fbf93b7f69ca6a2f1b5
2021-03-14T16:04:26.0368493Z ##[endgroup]
2021-03-14T16:04:26.0761189Z ##[group]Run actions/checkout@v2
2021-03-14T16:04:26.0761944Z with:
2021-03-14T16:04:26.0763619Z   token: ***
2021-03-14T16:04:26.0764261Z   repository: myUser/myProject
2021-03-14T16:04:26.0764899Z   ssh-strict: true
2021-03-14T16:04:26.0765450Z   persist-credentials: true
2021-03-14T16:04:26.0765987Z   clean: true
2021-03-14T16:04:26.0766410Z   fetch-depth: 1
2021-03-14T16:04:26.0766837Z   lfs: false
2021-03-14T16:04:26.0767254Z   submodules: false
2021-03-14T16:04:26.0767708Z ##[endgroup]
2021-03-14T16:04:26.5724570Z Syncing repository: myUser/myProject
2021-03-14T16:04:26.5725598Z ##[group]Getting Git version info
2021-03-14T16:04:26.5726878Z Working directory is '/home/runner/work/myProject/myProject'
2021-03-14T16:04:26.5728059Z [command]/usr/bin/git version
2021-03-14T16:04:26.5892765Z git version 2.30.1
2021-03-14T16:04:26.5894282Z ##[endgroup]
2021-03-14T16:04:26.5903587Z Deleting the contents of '/home/runner/work/myProject/myProject'
2021-03-14T16:04:26.5905407Z ##[group]Initializing the repository
2021-03-14T16:04:26.5909187Z [command]/usr/bin/git init /home/runner/work/myProject/myProject
2021-03-14T16:04:26.6029092Z hint: Using 'master' as the name for the initial branch. This default branch name
2021-03-14T16:04:26.6030401Z hint: is subject to change. To configure the initial branch name to use in all
2021-03-14T16:04:26.6031533Z hint: of your new repositories, which will suppress this warning, call:
2021-03-14T16:04:26.6032386Z hint: 
2021-03-14T16:04:26.6033943Z hint:  git config --global init.defaultBranch <name>
2021-03-14T16:04:26.6034638Z hint: 
2021-03-14T16:04:26.6035442Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
2021-03-14T16:04:26.6036651Z hint: 'development'. The just-created branch can be renamed via this command:
2021-03-14T16:04:26.6037336Z hint: 
2021-03-14T16:04:26.6037909Z hint:  git branch -m <name>
2021-03-14T16:04:26.6041711Z Initialized empty Git repository in /home/runner/work/myProject/myProject/.git/
2021-03-14T16:04:26.6053565Z [command]/usr/bin/git remote add origin https://github.com/myUser/myProject
2021-03-14T16:04:26.6112480Z ##[endgroup]
2021-03-14T16:04:26.6113335Z ##[group]Disabling automatic garbage collection
2021-03-14T16:04:26.6121163Z [command]/usr/bin/git config --local gc.auto 0
2021-03-14T16:04:26.6165369Z ##[endgroup]
2021-03-14T16:04:26.6176967Z ##[group]Setting up auth
2021-03-14T16:04:26.6187245Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand
2021-03-14T16:04:26.6246287Z [command]/usr/bin/git submodule foreach --recursive git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :
2021-03-14T16:04:26.6900209Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader
2021-03-14T16:04:26.6940390Z [command]/usr/bin/git submodule foreach --recursive git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :
2021-03-14T16:04:26.7216178Z [command]/usr/bin/git config --local http.https://github.com/.extraheader AUTHORIZATION: basic ***
2021-03-14T16:04:26.7266677Z ##[endgroup]
2021-03-14T16:04:26.7268826Z ##[group]Fetching the repository
2021-03-14T16:04:26.7277912Z [command]/usr/bin/git -c protocol.version=2 fetch --no-tags --prune --progress --no-recurse-submodules --depth=1 origin +ea9bc17ea94e3e6c966f65eadaab92e81b90346c:refs/remotes/origin/production
2021-03-14T16:04:27.4292763Z remote: Enumerating objects: 2050, done.         
2021-03-14T16:04:27.5051531Z remote: Counting objects: 100% (2050/2050), done.         
2021-03-14T16:04:27.6195514Z remote: Compressing objects: 100% (1621/1621), done.          
2021-03-14T16:04:28.5762484Z Receiving objects: 100% (2050/2050), 2.44 MiB | 4.84 MiB/s
2021-03-14T16:04:28.5763176Z Receiving objects: 100% (2050/2050), 13.82 MiB | 14.48 MiB/s, done.
2021-03-14T16:04:28.6012285Z Resolving deltas: 100% (469/469)
2021-03-14T16:04:28.6012872Z Resolving deltas: 100% (469/469), done.
2021-03-14T16:04:28.8206899Z From https://github.com/myUser/myProject
2021-03-14T16:04:28.8208438Z  * [new ref]         ea9bc17ea94e3e6c966f65eadaab92e81b90346c -> origin/production
2021-03-14T16:04:28.8229099Z ##[endgroup]
2021-03-14T16:04:28.8229852Z ##[group]Determining the checkout info
2021-03-14T16:04:28.8232088Z ##[endgroup]
2021-03-14T16:04:28.8232766Z ##[group]Checking out the ref
2021-03-14T16:04:28.8236775Z [command]/usr/bin/git checkout --progress --force -B production refs/remotes/origin/production
2021-03-14T16:04:28.9951267Z Switched to a new branch 'production'
2021-03-14T16:04:28.9952452Z Branch 'production' set up to track remote branch 'production' from 'origin'.
2021-03-14T16:04:28.9961000Z ##[endgroup]
2021-03-14T16:04:29.0014527Z [command]/usr/bin/git log -1 --format='%H'
2021-03-14T16:04:29.0046451Z 'ea9bc17ea94e3e6c966f65eadaab92e81b90346c'
2021-03-14T16:04:29.0162817Z ##[group]Run git config --local user.email "action@github.com"
2021-03-14T16:04:29.0163849Z [36;1mgit config --local user.email "action@github.com"[0m
2021-03-14T16:04:29.0164730Z [36;1mgit config --local user.name "GitHub Action"[0m
2021-03-14T16:04:29.0165375Z [36;1mgit checkout -B deploy[0m
2021-03-14T16:04:29.0165987Z [36;1mgit add -f public/[0m
2021-03-14T16:04:29.0166580Z [36;1mgit commit -m "Build front-end assets"[0m
2021-03-14T16:04:29.0167255Z [36;1mgit push -f origin deploy[0m
2021-03-14T16:04:29.0215326Z shell: /usr/bin/bash -e {0}
2021-03-14T16:04:29.0215807Z ##[endgroup]
2021-03-14T16:04:29.3153383Z Switched to a new branch 'deploy'
2021-03-14T16:04:29.3313550Z On branch deploy
2021-03-14T16:04:29.3316648Z nothing to commit, working tree clean
2021-03-14T16:04:29.3381472Z ##[error]Process completed with exit code 1.
2021-03-14T16:04:29.3653154Z Post job cleanup.
2021-03-14T16:04:29.4723616Z [command]/usr/bin/git version
2021-03-14T16:04:29.4777037Z git version 2.30.1
2021-03-14T16:04:29.4815499Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand
2021-03-14T16:04:29.4854852Z [command]/usr/bin/git submodule foreach --recursive git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :
2021-03-14T16:04:29.5117676Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader
2021-03-14T16:04:29.5149269Z http.https://github.com/.extraheader
2021-03-14T16:04:29.5160054Z [command]/usr/bin/git config --local --unset-all http.https://github.com/.extraheader
2021-03-14T16:04:29.5197186Z [command]/usr/bin/git submodule foreach --recursive git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :
2021-03-14T16:04:29.5497217Z Cleaning up orphan processes
Run Code Online (Sandbox Code Playgroud)

目前,我的生产分支没有提交任何内容,因为生产操作没有开始。

任何建议我做错了什么?

为什么我会收到这个错误?

我非常感谢您的回复!

tor*_*rek 6

为什么我会收到这个错误?

明确地说,“这个错误”是:

2021-03-14T16:04:29.3381472Z ##[error]Process completed with exit code 1.
Run Code Online (Sandbox Code Playgroud)

完成的过程是shell:

2021-03-14T16:04:29.0215326Z shell: /usr/bin/bash -e {0}
Run Code Online (Sandbox Code Playgroud)

在脚本中运行一些命令;显然,这些命令之一必须以状态代码 1(“通用故障”)bash -e退出,这导致也以状态代码 1 退出。

我们可以看到每个命令的输出,因此我们可以根据知道哪些命令打印哪些内容,将每个命令与其输出相关联。这是脚本:

git config --local user.email "action@github.com"
git config --local user.name "GitHub Action"
git checkout -B deploy
git add -f public/
git commit -m "Build front-end assets"
git push -f origin deploy
Run Code Online (Sandbox Code Playgroud)

(我去掉了变色的ESC [...m序列,因为它们只是碍手碍脚,并去掉了时间戳,因为它们并不真正相关。)您应该认出这些命令:它们是您在 YAML 文件中提供的命令。

以下是每个命令的输出:

Switched to a new branch 'deploy'
On branch deploy
nothing to commit, working tree clean
Run Code Online (Sandbox Code Playgroud)

现在,git config通常什么都不打印,所以这两个git configs 可能成功了,因为我们看到打印了一些东西(第一行)。我们看到打印的是Switched to a new branch 'deploy'.

这正是第三个命令 ,git checkout -B deploy成功时将打印的内容。所以我们一定已经达到了第三个命令,它成功了。这将让我们继续第四个命令,git add -f public/

git add命令通常不打印任何内容。所以我们现在不能确定它是否有效,但我们确实看到了进一步的输出,以On branch .... 这绝对不是来自git add,所以大概是git add成功的,这会让我们继续第五个命令,git commit -m [message]。这个命令在成功和失败时打印内容:成功时我们会收到一条消息,显示新提交的缩写哈希 ID,失败时,我们会得到git status输出:

2021-03-14T16:04:29.3381472Z ##[error]Process completed with exit code 1.
Run Code Online (Sandbox Code Playgroud)

这实际上是一种失败:没有任何东西可以提交,所以 Git不会进行新的提交。为什么没有什么可提交的?因为 Git 的索引匹配当前 ( HEAD) 提交。也就是说,没有git add -f public/更新文件。要么public/是空的,要么里面的文件public/HEAD提交中的文件匹配。

如果我们检查git commit以这种方式失败的a 的实际退出状态,它是 1:

2021-03-14T16:04:29.0215326Z shell: /usr/bin/bash -e {0}
Run Code Online (Sandbox Code Playgroud)

所以这个git commit命令是失败的,它失败了,因为没有什么新的东西可以提交。

您有多种选择如何继续:

  • 弄清楚为什么没有任何东西可以提交,当你清楚地期望有一些东西可以提交时。

  • 检查是否有任何要提交的内容,如果没有,则什么都不提交。

  • 使用git commit --allow-empty指示的Git作出新的承诺,即使没有必要为一个新的提交。(这样做的优点是非常简单。)

  • git commit通过使用(cmd || true)构造,强行假设即使失败也成功,就像您在此处所做的那样:

    (git push) || true
    
    Run Code Online (Sandbox Code Playgroud)

我将这些按不良程度增加的大致顺序排列,尽管其中一些是意见/判断问题。

请注意,在诊断某个脚本的故障时,如果脚本中的哪个命令失败了不是很明显,则有几种方法可以提供帮助。例如,在这里,很明显git commit失败了,因为只会git commit像 一样结束git status,并且它会在失败并显示“无提交”消息准确地执行此操作。但是,如果是其他一些更模棱两可的失败呢?可以通过添加echo命令来缩小这些失败的范围,以便我们知道脚本的哪些部分正在运行。或者,如果它不会过多地干扰其他事情,我们可以set -x在 bash 脚本中:这会导致 shell 打印出标准错误输出,+它实际运行的每个命令的行,就在运行它之前。这将立即将退出状态固定到生成它的命令。