if 子句中的 gitlab yaml 锚引用

发布于 2025-01-09 20:36:38 字数 469 浏览 1 评论 0原文

是否可能或有办法在 BASH if 子句中使用 yaml 锚引用。 如果是这样,怎么办? 这就是我到目前为止正在尝试的。

create-cluster:
  needs: 
    - terra-bootstrap
  script:
    - export TF_VAR_state_bucket_prefix="${TF_VAR_vsad}/${TF_VAR_cluster_name}"
    - pushd terra-cluster
    - *init_with_gcs_state
    - |
      if [[ "${CLUSTER_EXISTS}" == 'false' ]]; then
       terraform apply -auto-approve
       *does_cluster_exist
      fi
    - popd
  stage: create-cluster
  tags:
    - gke

Is it possible, or is there a way, to use a yaml anchor reference in a BASH if clause.
If so, how?
This is what I'm attempting so far.

create-cluster:
  needs: 
    - terra-bootstrap
  script:
    - export TF_VAR_state_bucket_prefix="${TF_VAR_vsad}/${TF_VAR_cluster_name}"
    - pushd terra-cluster
    - *init_with_gcs_state
    - |
      if [[ "${CLUSTER_EXISTS}" == 'false' ]]; then
       terraform apply -auto-approve
       *does_cluster_exist
      fi
    - popd
  stage: create-cluster
  tags:
    - gke

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

摘星┃星的人 2025-01-16 20:36:38

不,YAML 规范不允许您这样做。 YAML 锚点不能在字符串(或任何其他标量)内使用。

GitLab CI YAML 的更好方法是将可重用的 bash 步骤定义为函数,然后根据需要在作业脚本逻辑中使用这些步骤。

例如,您可以定义一个函数does_cluster_exist并使用anchors/reference/etc引用它。

.helper_functions:
  script: |
     function cluster_exists() {
         cluster="$1"
         
         # ... complete the function logic
     }

     function another_function() {
         return 0
     }

another_job:
  before_script:
    # ensure functions are defined
    - !reference [.helper_functions, script]
  script:
    # ...
    # use the functions in an `if` or wherever...
    - |
      if cluster_exists "$cluster"; then
         another_function
      else
         echo "fatal, cluster does not exist" > /dev/stderr
         exit 1
      fi

No, the YAML spec does not allow you to do this. YAML anchors cannot be used within a string (or any other scalar).

A better approach for GitLab CI YAML would be to define your reusable bash steps as functions then utilize those within your job script logic as-needed.

For example, you can define a function does_cluster_exist and reference it using anchors/reference/etc.

.helper_functions:
  script: |
     function cluster_exists() {
         cluster="$1"
         
         # ... complete the function logic
     }

     function another_function() {
         return 0
     }

another_job:
  before_script:
    # ensure functions are defined
    - !reference [.helper_functions, script]
  script:
    # ...
    # use the functions in an `if` or wherever...
    - |
      if cluster_exists "$cluster"; then
         another_function
      else
         echo "fatal, cluster does not exist" > /dev/stderr
         exit 1
      fi
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文