如何执行shell脚本?

JeffMinsungKim
├── .github
│   └── workflows
│       ├── cd.yml
│       └── ci.yml
├── scripts
│   ├── createDevEBAppVersion.sh
│   └── createProdEBAppVersion.sh
├── src

Github Actions引发以下错误:

/home/runner/work/_temp/9c99fa0d-20da-49ed-a0af-322f274c13ac.sh:第1行:[refs / heads / develop:没有此类文件或目录

/home/runner/work/_temp/9c99fa0d-20da-49ed-a0af-322f274c13ac.sh:第5行:[[refs / heads / develop:无此类文件或目录

name: CD

env:
  PACKAGE_NAME          : "app_${GITHUB_SHA::8}.zip"
  ARTIFACT_ROOT         : "${GITHUB_REF#refs/*/}"
  APPLICATION_NAME      : "example-app-name"
  AWS_ACCESS_KEY_ID     : ${{ secrets.AWS_ACCESS_KEY }}
  AWS_SECRET_ACCESS_KEY : ${{ secrets.AWS_SECRET_KEY }}
  AWS_REGION            : ${{ secrets.AWS_REGION }}
  AWS_BUCKET            : ${{ secrets.AWS_S3_BUCKET_NAME }}

on:
  push:
    branches:
      - develop
    paths-ignore:
      - '**.json'
      - '**.md'
  release:
    tags:
      - 'v*'

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Create ZIP package artifact
      run: git archive --format=zip HEAD -o ${{ env.PACKAGE_NAME }}

    - name: Configure AWS Credentials
      uses: aws-actions/configure-aws-credentials@v1
      with:
        aws-access-key-id: ${{ env.AWS_ACCESS_KEY_ID }}
        aws-secret-access-key: ${{ env.AWS_SECRET_ACCESS_KEY }}
        aws-region: ${{ env.AWS_REGION }}

    - name: Copy package artifact to S3 bucket
      run: |
        aws s3 cp ${{ env.PACKAGE_NAME }} s3://${{ env.AWS_BUCKET }}/${{ env.APPLICATION_NAME }}/
        echo "✔ Artifact uploaded successfully to s3://${{ env.AWS_BUCKET }}/${{ env.APPLICATION_NAME }}/${{ env.PACKAGE_NAME }}"

    - name: Create new ElasticBeanstalk Application Version
      working-directory: scripts
      run : |
        if ["${{ github.ref }}" == "refs/heads/develop"]; then
          chmod +x ./createDevEBAppVersion.sh
          ./createDevEBAppVersion.sh
        fi
        if [["${{ github.ref }}" == *"refs/tags/v"*]]; then
          chmod +x ./createProdEBAppVersion.sh
          ./createProdEBAppVersion.sh
        fi

    ...

我没有尝试过working-directory,但没有用。

#!/usr/bin/env bash

aws elasticbeanstalk create-application-version \
--application-name ${{ env.APPLICATION_NAME }} \
--source-bundle S3Bucket="${{ env.AWS_BUCKET }}",S3Key="${{ env.APPLICATION_NAME }}/${{ env.PACKAGE_NAME }}" \
--version-label "${{ env.PACKAGE_NAME }}" \
--description "Application version created from https://github.com/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID"
echo "✔ Deployment triggered successfully."

CI似乎无法找到文件。我该如何执行createDevEBAppVersion.sh

爱德华·汤姆森

您的错误消息是:

/home/runner/work/_temp/9c99fa0d-20da-49ed-a0af-322f274c13ac.sh: line 1: [refs/heads/develop: No such file or directory

它正在尝试执行[refs/heads/develop并失败。根本原因是您在括号和测试之间缺少空格。你要:

if [ "${{ github.ref }}" == "refs/heads/develop" ]; then

(与第5行相同)。

那是因为if在bourne shell中,shell实际上运行了它要评估的命令尽管看起来它正在评估表达式,但实际上是将表达式传递给名为的命令[

% ls -Flas /bin/\[
 8 -rwxr-xr-x  1 root  wheel  22704 May  4  2019 /bin/[*

这通常是与的符号链接(或硬链接)/bin/test,在某些shell中(例如bash和zsh)[实际上是内置的shell:

% which '['
[: shell built-in command

但是它的行为仍然像命令一样,从语法上说,它需要空间。因为:

if [ true ]; then ...

运行[命令(或shell-builtin)以评估/bin/true命令。

if [true ]; then ...

尝试运行不存在的[true命令。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何执行shell脚本?

来自分类Dev

如何从Hubot执行Shell脚本

来自分类Dev

如何从PHP脚本执行Shell

来自分类Dev

如何从soapui groovy脚本执行shell脚本?

来自分类Dev

如何从soapui groovy脚本执行shell脚本?

来自分类Dev

如何识别Shell脚本执行与点执行

来自分类Dev

如何通过shell脚本执行vim命令

来自分类Dev

如何在Jenkinsfile中执行Shell脚本?

来自分类Dev

如何从任何目录执行Shell脚本

来自分类Dev

如何从任何目录执行bash shell脚本?

来自分类Dev

如何在PHP中执行Shell脚本

来自分类Dev

如何从受信任的Shell执行脚本

来自分类Dev

如何从Shell脚本执行特定命令

来自分类Dev

如何使用Gradle执行Shell脚本

来自分类Dev

如何从Python脚本在后台执行Shell脚本

来自分类Dev

从Python脚本执行时如何检查bash shell脚本的状态?

来自分类Dev

Shell脚本执行循环

来自分类Dev

从shell脚本执行symbolicatecrash

来自分类Dev

关于执行Shell脚本

来自分类Dev

Shell脚本执行循环

来自分类Dev

让Shell脚本默认执行

来自分类Dev

从Tcl执行shell脚本

来自分类Dev

执行不带 `./` 的 shell 脚本

来自分类Dev

Shell 脚本执行失败

来自分类Dev

如果Shell脚本执行失败,如何实现重试机制?

来自分类Dev

如何使用Coffeescript和ShellJS编写可执行的Shell脚本?

来自分类Dev

如何避免Shell脚本执行中的命令错误

来自分类Dev

如何在C#中执行Shell脚本?

来自分类Dev

如何检查Linux Shell脚本是否由cronjob执行?