pom.xml 파일에서 값을 가져 와서 몇 가지 변수를 설정하고 싶습니다. 이러한 변수는 여러 단계 및 작업에서 사용되므로 전역이어야합니다.
gitlab-ci 문서에 따르면 두 가지 방법으로 전역 변수를 설정할 수 있습니다.
변수 문 사용 :
variable:
pom_artifactID: $(grep -m1 '<artifactId>' pom.xml | cut -d '<' -f2 |cut -d '>' -f2)
"before"스크립트 사용 :
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"명령에 의존하고 내 파이프 라인에 사용 된 일부 도커 이미지에 이전 버전의 grep이 있기 때문에 작동하지 않습니다.
전역 변수를 설정하는 또 다른 방법이 있습니다. 스테이지와 작업간에 변수를 전달합니까?
현재 GitLab에서는 단계 또는 작업간에 환경 변수를 전달할 방법이 없습니다.
하지만 이에 대한 요청이 있습니다 : https://gitlab.com/gitlab-org/gitlab/-/issues/22638
현재 해결 방법은 아티팩트 를 사용하는 것 입니다. 기본적으로 파일을 전달합니다.
비슷한 사용 사례가있었습니다. Java 앱 버전을 가져와 pom.xml
나중에 파이프 라인에서 다양한 작업에 전달했습니다.
우리가 그것을 어떻게했는지 .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 요소가 잠재적으로 여러 줄에 걸쳐있을 수 있으므로 일반 xml.pom
에서 값을 추출하려면 XML 로 처리하는 pom.xml
것이 좋습니다 grep
.
적어도 몇 가지 옵션이 있습니다. 예 :
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)")
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다