gpt4 book ai didi

bash - 如何执行shell脚本?

转载 作者:行者123 更新时间:2023-12-03 20:25:32 27 4
gpt4 key购买 nike

├── .github
│ └── workflows
│ ├── cd.yml
│ └── ci.yml
├── scripts
│ ├── createDevEBAppVersion.sh
│ └── createProdEBAppVersion.sh
├── src
Github Actions 抛出以下错误:

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

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


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 shells 中实际上运行一个它评估的命令。虽然它看起来像是在计算一个表达式,但它实际上是在将一个表达式传递给一个名为 [ 的命令。 .
% ls -Flas /bin/\[
8 -rwxr-xr-x 1 root wheel 22704 May 4 2019 /bin/[*

这通常是指向 /bin/test 的符号链接(symbolic link)(或硬链接(hard link))。 ,在某些 shell 中,如 bash 和 zsh, [实际上将是一个内置的shell:
% which '['
[: shell built-in command

但它的行为仍然像一个命令,从语法上讲,它需要空格。因为:
if [ true ]; then ...

运行 [命令(或 shell-builtin)评估 /bin/true命令。和
if [true ]; then ...

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

关于bash - 如何执行shell脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62059183/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com