본문 바로가기

Tool

[Jenkins] Git 파일 변경확인

728x90

Jenkins에서 빌드를 할 때 Git으로부터 받은 파일 중 변경된 내용이 확인할 필요가 있습니다.

Pipeline에서 어떻게 사용할지 공유합니다.

Git에서 Clone 받기

빌드할 레포지토리를 Git으로부터 받습니다.

stage('Git Clone') {
  SCM_VARS = git branch: 'development', url: 'https://github.com/oofbird/repo.git'
}

SCM_VARS로 다음의 정보가 포함됩니다.

  • GIT_BRANCH : 브랜치명 (origin/master 등)
  • GIT_LOCAL_BRANCH : 로컬 브랜치명 (mater 등)
  • GIT_COMMIT : SHA-1 커밋번호
  • GIT_PREVIOUS_COMMIT : 직전 빌드 SHA-1 커밋번호
  • GIT_PREVIOUS_SUCCESSFUL_COMMIT : 직전 성공한 빌드 SHA-1 커밋번호

원하는 파일 비교

git diff 명령으로 파일변경을 비교합니다.

stage('Check File change') {
  def CHANGE = sh(script: "git diff ${SCM_VARS.GIT_PREVIOUS_SUCCESSFUL_COMMIT} ${SCM_VARS.GIT_COMMIT} test.txt", returnStdout: true)
  
  script {
    if (CHANGE.length() > 0) {
      sh "echo 'test.txt is change'
    }
  }
}

지금의 커밋과 이전에 성공한 빌드의 커밋을 비교하여 test.txt 파일이 변경되었는지 확인합니다.

변경이 있을 경우 CHANGE에 git diff 명령의 출력결과가 입력됩니다.

없는 경우에는 CHANGE에 아무런 결과가 없습니다.

그래서 CHANGE.length() 로 0 이상이 될 경우 변경이 되었다 판단이 가능합니다.

전체 구성

위 두개를 합친 구성은 다음과 같습니다.

node {
  def SCM_VARS
  
  stage('Git Clone') {
    SCM_VARS = git branch: 'development', url: 'https://github.com/oofbird/repo.git'
  }
  
  stage('Check File change') {
    def CHANGE = sh(script: "git diff ${SCM_VARS.GIT_PREVIOUS_SUCCESSFUL_COMMIT} ${SCM_VARS.GIT_COMMIT} test.txt", returnStdout: true)
  
    script {
      if (CHANGE.length() > 0) {
        sh "echo 'test.txt is change'
      }
    }
  }
}
반응형