최근에 Gitlab으로 옮겨서 파이프 라인을 사용하기 시작했습니다. 빌드 서버 (Ubuntu 16.04 인스턴스)를 설치하고 쉘 실행 프로그램을 사용하는 러너를 설치했지만 실제로는 .gitlab-ci.yml
파일에 정의 된 스크립트를 실행하는 방법이 확실하지 않습니다. 다음 코드 조각을 고려하십시오쉘 실행 프로그램은 어떻게 스크립트를 실행합니까?
script:
- sh authenticate.sh $DEPLOY_KEY
- cd MAIN && sh deploy.sh && cd ..
- sh deploy_service.sh MATCHMAKING
- sh deauthenticate.sh
내가 인상이었다 그것이 것입니다 단지 파이프를 강타 이러한 명령을, 따라서 나는 기본 배쉬 동작을 기다리고 있었다. 그러나 ssh
오류로 인해 deploy.sh
이 실패합니다. Bash는 deploy_service.sh
(예상되는 동작 임)을 계속 실행하지만 can't open deploy_service.sh
오류로 실패하고 Bash가 마지막 명령문을 실행하지 않고 작업이 종료됩니다.
처음부터 set -e
을 수행하면 Bash는 오류가 발생하는 경우에만 중단되므로 모든 명령문이 실행될 것으로 예상됩니다. 나는 첫 번째 문으로 set -e
을 추가하려고 시도했으나 아무런 차이가 없다. 첫 번째 ssh
오류에서 종료되지 않는다. 또한 (오류에 종료, set -e
하지 않고, 그것을 왜 set -e
$ set -e
$ cd MAIN && sh deploy.sh && cd ..
deploy.sh: 72: deploy.sh: Bad substitution
Building JS bundles locally...
> better-npm-run build
running better-npm-run in x
Executing script: build
to be executed: node ./bin/build
-> building js bundle...
-> minifying js bundle...
Uploading JS bundles to server temp folder...
COMMENCING RESTART. 5,4,3,2,1...
ssh: Could not resolve hostname $: Name or service not known
$ sh deploy_service.sh MATCHMAKING
sh: 0: Can't open deploy_service.sh
ERROR: Job failed: exit status 1
으로 set -e
$ cd MAIN && sh deploy.sh && cd ..
deploy.sh: 72: deploy.sh: Bad substitution
Building JS bundles locally...
> better-npm-run build
running better-npm-run in x
Executing script: build
to be executed: node ./bin/build
-> building js bundle...
-> minifying js bundle...
Uploading JS bundles to server temp folder...
COMMENCING RESTART. 5,4,3,2,1...
ssh: Could not resolve hostname $: Name or service not known
$ sh deploy_service.sh MATCHMAKING
sh: 0: Can't open deploy_service.sh
ERROR: Job failed: exit status 1
없이
:
나는 아래 Gitlab에서 정확한 출력을 추가했습니다 왜 두 번째 오류에서만 종료되고 ssh
오류가 아닌지)? 어떤 통찰력이라도 대단히 감사하겠습니다.
"쉬 deploy.sh"당신은 호출하고'sh' 여기, bash가 아니라. 그들은 당신의 시스템에서 같은 것이 아닐 수도 있습니다. bash를 원하면 bash를 호출하십시오. – Kenster
@Kenster'bash'는 그 스크립트에서'sh'를 호출하는데 사용되며, 에러는 적절한 종료 코드 (첫 번째 오류는 127, 두 번째 오류는 255)와 함께 'bash'로 반환됩니다. 문제는'bash'가 예상 한대로 오류를 감지하고 있지 않다는 것입니다. – Amposter
docs : #이 명령은 다른 사용자 (쉘 실행 프로그램)의 컨텍스트에서 빌드가 실행되어야 할 때 사용됩니다 'cat generated-bash-script | su --shell/bin/bash --login user' – Amposter