我目前正在尝试使用 bash 从文件名中提取子字符串和版本号。
文件名有两种格式:
example-substring-1.1.0.tgz
example-substring-1.1.0-branch-name.tgz
Run Code Online (Sandbox Code Playgroud)
对于第一个场景,我能够使用 sed 提取版本号,如下所示:
echo example-substring-1.1.0.tgz | sed "s/.*-\(.*\)\.[a-zA-Z0-9]\{3\}$/\1/"
Run Code Online (Sandbox Code Playgroud)
然而,这不适用于第二种情况。
最终我想创建一个脚本,将第一个子字符串和版本存储在关联数组中,如下所示。
example_array["example-substring"]="1.1.0"
example_array["example-substring"]="1.1.0-branch-name"
Run Code Online (Sandbox Code Playgroud)
然而,这被证明很棘手,因为我似乎找不到适合这两种情况的好方法。对于版本包含分支名称的情况,我事先无法知道分支名称将包含多少个单词。
我认为变量扩展可能是可行的方法,但无法让它输出我想要的内容。
我目前有一个工作流程,可以在合并到 master 时触发部署,并确保开发作业在部署产品之前通过。总共有 4 个环境(2 个 dev 和 2 个 prod),如果可能的话,我希望能够减少代码重复并将作业数量减少到 1 个,因为作业之间唯一改变的是环境变量。
我遇到的问题是似乎没有办法根据 github 事件有条件地包含或排除条目。如果有人提供意见或知道一个好的解决方法,我将非常感激。
文件和内容如下。
应用.yaml:
name: Terraform Apply
on:
deployment:
workflow_dispatch:
inputs:
environment:
description: "name of the environment"
required: true
default: "dev"
env:
AWS_ACCESS_KEY_ID: ${{ secrets.KEY_ID_EXAMPLE }}
AWS_SECRET_KEY: ${{ secrets.KEY_EXAMPLE }}
jobs:
deploy-dev:
name: TF Apply - Dev
runs-on: ubuntu-latest
if: ${{ github.event.deployment.environment == 'dev' || github.event.deployment.environment == 'all' || github.event.inputs.environment == 'dev' || github.event.inputs.environment == 'all' }}
env:
TF_VAR_aws_provider_role_arn: arn:example
TF_VAR_example_api_key: ${{ secrets.EXAMPLE_API_KEY }}
TF_VAR_example_app_key: ${{ …Run Code Online (Sandbox Code Playgroud)