도움이 필요하다
bash와 gitlab을 배우고 있어요
작동시킬 수 없습니다
gitlab 파이프라인.gitlab-ci.yml
variables:
var1: test1
var2: test2
stages:
- build
build-job:
stage: build
script:
- |
bash -s << EOF
#!/bin/bash
test1 () {
echo $var1
test3=$var1
}
test2 () {
test1
echo $var2
echo $test3
}
test2
EOF
'''
틀린 대답을 얻었어
'''
작업 스크립트의 "step_script" 단계 실행 00:00
$ bash -s << EOF # 여러 줄 명령 접기
테스트 1
테스트 2
작업 성공
누락된 변수 테스트 3
'''
동일한 bash 스크립트 test.sh
#!/bin/bash
test1 () {
echo $var1
test3=$var1
}
test2 () {
test1
echo $var2
echo $test3
}
test2
'''
$export var1 = 테스트 1 $ 내보내기 var2 = 테스트 2
$sh 테스트.sh
올바른 답변을 얻었습니다.
테스트 1 테스트 2 테스트 1
그러나 yaml 생성자는 함수 사이에서 test3 변수를 잃어버렸습니다.
gitlab ci에서 test.sh를 실행하는 방법을 알고 있지만 yaml에서 텍스트로 실행해야 하는데 어떻게 해야 합니까?
감사해요
답변1
에서 언급했듯이내 대답이전 질문에 대해서는 여기에 문서를 인용해야 합니다. 그렇지 않은 경우 bash -c
호출 셸은 스크립트가 실행되기 전에 변수 확장(다른 확장 포함)을 수행합니다.
스크립트의 각 확장명 주위에 큰따옴표도 넣는 것이 가장 좋습니다 bash -c
.
그래서:
bash -s <<'END_SCRIPT'
test1 () {
echo "$var1"
test3=$var1
}
test2 () {
test1
echo "$var2"
echo "$test3"
}
test2
END_SCRIPT
bash
(스크립트를 명시적 으로 실행하고 있으므로 #!
- 라인은 필요하지 않습니다.)
here 문서 시작 부분에 here 문서 구분 기호를 인용하지 않으면 bash -c
스크립트를 실행하기 시작한 셸이 모든 변수를 대체합니다. var1
및 값이 환경에 존재한다고 가정하면 var2
실행될 스크립트는 다음과 같습니다.test1
test2
bash -s <<END_SCRIPT
test1 () {
echo "test1"
test3=test1
}
test2 () {
test1
echo "test2"
echo ""
}
test2
END_SCRIPT