【问题标题】:Gitlab CI/CD create and use custom user functionsGitlab CI/CD 创建和使用自定义用户函数
【发布时间】:2021-08-15 15:06:54
【问题描述】:

我尝试在我的 gitlab 配置文件中创建这样的函数:

deploy:
  stage: dev
  services: 
    - docker:dind
  script:
    - myFunction () {   api_pl_tmp=$(curl -s --header "PRIVATE-TOKEN: $TOKEN_VAR" "https://git.example.ru/api/v4/projects/1/pipelines/latest" | jq .) }
    - while myFunction; do
    - if [ $(echo $api_pl_tmp | jq -r .status) = "success"  ]
    - then
    - export PROJECT_CURRENT=$($api_pl_tmp  |  jq -r '{id:.id,sha:.sha[0:8]}' | base64)
    - break
    - fi
    - if [ $(echo $api_pl_tmp | jq -r .status) = "failed"  ]
    - then
    - echo "Error: Frontend can't be deployed!"
    - exit 1
    - fi
    - if [ $(echo $api_pl_tmp | jq -r .status) = "running"  ]
    - then
    - echo "Wait 5 sec... Frontend deploying!"
    - sleep 5
    - else
    - echo Unknow status $(echo $api_pl_tmp  |  jq -r .status)
    - exit 1
    - fi
    - done

但它不起作用,gitlab 向我返回错误消息:

此 GitLab CI 配置无效:jobs:deploy-to-dev:script config 应该是一个字符串或最多 10 级的字符串嵌套数组 很深的

我该如何解决这个问题,或者我的自定义函数有错误?

【问题讨论】:

  • 也许也可以将我的函数与shell 文件分开?

标签: bash gitlab gitlab-ci cicd


【解决方案1】:

- 将命令和命令分隔开来。将您的命令作为一个命令,而不是多个命令。请记住,它们是用空格连接的。

您的脚本的问题是冒号 - 请参阅 https://gitlab.com/gitlab-org/gitlab-foss/-/issues/30097

deploy:
    stage: dev
    services: 
    - docker:dind
    script:
    - "colon=:"
    - myFunction () {
        api_pl_tmp=$(curl -s --header "PRIVATE-TOKEN$colon $TOKEN_VAR" \
        "https$colon//git.example.ru/api/v4/projects/1/pipelines/latest" | jq .);
      }
    - while myFunction; do
         if [ $(echo $api_pl_tmp | jq -r .status) = "success"  ]; then
            export PROJECT_CURRENT=$($api_pl_tmp  |  jq -r '{id:.id,sha:.sha[0:8]}' | base64);
            break;
          fi;
          if [ $(echo $api_pl_tmp | jq -r .status) = "failed"  ]; then
            echo "Error$colon Frontend cant be deployed";
            exit 1;
          fi;
          if [ $(echo $api_pl_tmp | jq -r .status) = "running"  ]; then
            echo "Wait 5 sec... Frontend deploying!";
            sleep 5;
          else
            echo Unknow status $(echo $api_pl_tmp  |  jq -r .status);
            exit 1;
          fi;
        done

还有jq .) } 缺少;。首先在您自己的 shell 中检查您的脚本。使用 https://shellcheck.net 检查您的脚本。

另外,$($api_pl_tmp 缺少回显,并且引用存在很多问题。使用一致的缩进并尝试编写可读的代码以尽量减少拼写错误。

【讨论】:

  • 我收到错误 unexpected end of file (expecting "}") @KamilCuk
  • Also jq .) } is missing a ; 请先将代码发布到您的终端和文本。想象一下换行符被空格替换。
猜你喜欢
  • 2021-06-25
  • 2019-12-15
  • 2020-12-21
  • 2020-07-03
  • 2021-12-22
  • 2020-02-02
  • 1970-01-01
  • 1970-01-01
  • 2023-01-13
相关资源
最近更新 更多