gpt4 book ai didi

global-variables - 在 gitlab-ci 中动态设置全局变量

转载 作者:行者123 更新时间:2023-12-03 14:07:50 28 4
gpt4 key购买 nike

我想通过从 pom.xml 文件中获取值来设置一些变量。这些变量需要是全局的,因为它们将在多个阶段和作业中使用。

根据 gitlab-ci 文档,我可以通过两种不同的方式设置全局变量:

  • 使用变量语句:
    variable:  
    pom_artifactID: $(grep -m1 '<artifactId>' pom.xml | cut -d '<' -f2 |cut -d '>' -f2)
  • 使用“之前”脚本:
     before_script:
    - pom_artifactID=$(grep -m1 '<artifactId>' pom.xml | cut -d '<' -f2 |cut -d '>' -f2)
    - pom_artifactVersion=$(grep -m1 '<version>' pom.xml | cut -d '<' -f2 |cut -d '>' -f2)
    - pom_packaging=$(grep -m1 '<packaging>' pom.xml | cut -d '<' -f2 |cut -d '>' -f2)
    - pom_finalName=$({ grep -m1 '<finalName>' pom.xml | cut -d '<' -f2 | cut -d '>' -f2; [ ${PIPESTATUS[0]} -eq 0 ] && true || echo ${pom_artifactID}-${pom_artifactVersion}.$pom_packaging}; })

  • 第一个不起作用,因为 gitlab-ci 不计算 $(command),所以 pom_artifactID变成文字 "$(grep -m1 '' pom.xml | cut -d '<' -f2 |cut -d '>' -f2)"

    第二个不起作用,因为“before_script”依赖于“grep”命令,并且我的管道中使用的一些docker图像具有旧版本的grep。

    还有另一种方法来设置全局变量 o 在阶段和作业之间传递变量?

    最佳答案

    在作业和阶段之间传递值

    GitLab 目前无法在阶段或作业之间传递环境变量。
    但是有一个请求:https://gitlab.com/gitlab-org/gitlab/-/issues/22638

    当前的解决方法是使用 文物 - 基本上是通过文件。
    我们有一个类似的用例 - 从 pom.xml 获取 Java 应用程序版本并将其传递给稍后在管道中的各种作业。

    我们是如何做到的 .gitlab-ci.yml :

    stages:
    - prepare
    - package

    variables:
    VARIABLES_FILE: ./variables.txt # "." is required for image that have sh not bash

    get-version:
    stage: build
    script:
    - APP_VERSION=...
    - echo "export APP_VERSION=$APP_VERSION" > $VARIABLES_FILE
    artifacts:
    paths:
    - $VARIABLES_FILE
    package:
    stage: package
    script:
    - source $VARIABLES_FILE
    - echo "Use env var APP_VERSION here as you like ..."



    pom.xml 中提取值

    顺便治疗一下比较好 xml.pom作为 XML 从 pom.xml 中提取值而不是简单的 grep ,因为 XML 元素可能跨越多行。

    至少有几个选项,例如:
  • xmllint 中使用 XPath工具来自 libxml2-utils
  • get-version:
    image: ubuntu
    script:
    - apt-get update
    - apt-get install -y libxml2-utils
    - APP_VERSION=`xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' $POM_FILE`
  • 使用 python xml处理
  • get-version:
    image: python3
    script:
    - APP_VERSION=$(python3 -c "import xml.etree.ElementTree as ET; print(ET.parse(open('pom.xml')).getroot().find('{http://maven.apache.org/POM/4.0.0}version').text)")

    关于global-variables - 在 gitlab-ci 中动态设置全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60672150/

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