2016-11-15 1 views
-1

간단한 쉘 스크립트 질문. BB에서 파이프 라인을 설정하고 내가 포팅하는 작업 중 하나는 몇 번의 명령을 통해 정력 버전을 증가시키는 것입니다. 나는이 패키지를 별도의 작업으로 분리하여 패키지를 충돌시키고 repo로 커밋하기 때문에 자동 실행되지 않도록했습니다. 그래서 내가 뭘 하려는지는 작업 시작, git log 명령 실행, 마지막 커밋 메시지 확인, 미리 정의 된 메시지와 일치하는 경우에만 종료하는 것입니다. 그렇지 않으면 계속하십시오. 최신 git 커밋 메시지를 확인하고 bash에서 if else 체크를 실행하려면 어떻게해야합니까? 내가 빌드 또는 다른 단계를 일으키는 특정 커밋을 무시 ....이 수동 빌드 환경에서 잘 작동 할 수있는 동안 당신이해야 할 노력하고 무엇을 믿는쉘 스크립트로 git log를 확인하십시오.

#! /bin/bash 

git log -1 

if git log -1 === "pre-defined message"; 
    then 
    echo "already pushed and bumped exiting" 
    exit 1 
    else 
    echo "not bumped -- continuing job" 
    ./setup-git.sh 
fi 
+0

무엇이 질문은 무엇입니까? – codeforester

+0

마지막 커밋 메시지를 읽고 git log를 읽고 bash에서 else 문을 실행할 수 있다면 가능했습니다. 하지만 필자의 JavaScript 마음은 쉘 스크립트에 대해 더 자세히 알아야합니다. :) –

답변

0

찾을라는 메시지가 이미받은 경우 NPM이 설치 실행하지 않도록 설정 다른 쉘 스크립트에 필요하지만 내가 파이프 라인에서 필요한 만족하는 것 같다 솔루션 :

#! /bin/bash 

MESSAGE=$(git log -1 HEAD --pretty=format:%s) 

if [[ "$MESSAGE" == "This goes into next release" ]]; then 
    echo "already pushed run grunt and exit" 
    grunt build 
    echo "nothing to see here -- move along" 
else 
    echo "not bumped -- continuing job" 
    git config --global user.email "[email protected]" 
    git config --global user.name "Blah Blah" 
    git remote set-url origin https://user:[email protected]/myawesomegitrepo.git 
    grunt releaseme 
    git config --global push.default matching 
    git commit dist/destro -m "This goes into next release" 
    git push --tags 
fi 

신용 제임스 나인에 대한 이 스레드에 대한 그의 대답 : How to capture a git commit message and run an action

1

, 표준 빌드 도구가 될거야 문제.

저는 Jenkins에서이 문제로 고생했습니다. 빌드의 일부로 사용되거나 수정 된 지원 파일은 repo에 다시 커밋 될 때 빌드를 트리거하므로 끊이지 않는 빌드주기가 발생합니다.

내 솔루션은 repo를 하나의 디렉토리에있는 소스, 다른 파일에있는 지원 파일로 분리 한 다음 Jenkins에 대한 제외 영역을 추가하여 빌드에 의해 생성 된 커밋이 다음 폴링이 아무 것도하지 않도록했습니다 커밋 된 파일은 빌드중인 실제 프로젝트와 아무 관련이 없기 때문에). 조금 둔하지만 작동하는 것 같습니다.

그리고 그게 당신이 묻고있는 것이 아니라면, 실제로 질문하십시오. 그리고 나서 우리는 공헌자들이 함께 일할 컨텍스트를 가지고 있습니다!

+0

그건 원래 생각이었고 원래 대나무에서 어떻게 처리해야했는지. 모든 커밋이 PR을 통해 병합되는 한, 기능 분기/릴리스 분기 전략을 기반으로 작동해야합니다. 그것을 얻으려면 잠시 시간이 걸렸지 만 위의 솔루션에 게시 된 덕분에 효과가있었습니다. 유일한 문제는 else 문이 true를 반환하면 다른 쉘 스크립트가 첫 번째 쉘에서 시작한다는 것입니다. –

관련 문제