./bin/commits-since-last-production-deploy

4826 단어 heroku
작업을 프로덕션으로 옮기는 작업을 담당하는 여러 사람이 있는 팀에서 작업할 때 현재 main/master 분기가 완전히 배포되었는지 여부를 100% 확신할 수 없음을 의미할 수 있습니다. 제품에서 실행 중인 항목은 무엇인가요?

또는 아직 프로덕션에서 실행되지 않는 것은 무엇입니까?
main에 병합된 새 커밋을 프로덕션에 배포할 수 있습니까? 모두 내 것이기 때문입니다.

또는 공유 작업 브랜치에 추가된 형편없는 새로운 기여가 있으며 프로덕션으로 보내는 책임을 지고 고객, 지원 팀 및 개발에 잠재적으로 문제를 일으킬 수 있는 책임을 지기 전에 철저하게 검토하고 싶습니까? 몇 분 또는 몇 시간 안에 팀?

아래에 표시된 모든 Heroku 호스팅 프로젝트./bin/commits-since-last-production-deployhosted on a Gist에 추가하기 시작한 스크립트를 작성했습니다.

현재 브랜치를 특정 Heroku 애플리케이션과 비교하려면:

./bin/commits-since-last-production-deploy -a myapp-stg


추가 인수는 git log와 같이 --oneline 명령으로 전달됩니다.

./bin/commits-since-last-production-deploy -a myapp-stg --oneline


기본heroku 리모콘이 있어서 야생처럼git push heroku HEAD:main 할 수 있는 경우 -a 플래그를 삭제할 수 있습니다.

./bin/commits-since-last-production-deploy


스크립트는 아래에 있으며 hosted on a Gist입니다.

#!/bin/bash

help() {
  echo "Usage: ./bin/commits-since-last-production-deploy [-a myapp ] [ -h ]"
  exit 2
}

if ! command -v heroku &>/dev/null; then
  echo "Install 'heroku' CLI"
  exit 1
fi

if ! command -v jq &>/dev/null; then
  echo "Install 'jq' CLI"
  exit 1
fi

while getopts 'a:h' opt; do
  case "$1" in
  -a)
    appname="$2"
    shift 2
    ;;
  -h | --help)
    help
    exit 2
    ;;
  esac
done

last_deploy_result=$(heroku releases ${appname:+-a $appname} --json | jq -r ".[0].description")

if [[ $last_deploy_result =~ ^(Deploy (.*)) ]]; then
  sha="${BASH_REMATCH[2]}"
  git log "$sha"..HEAD "$@"
else
  echo "Last deploy to production did not succeed"
  echo "--> $last_deploy_result"
  exit 1
fi


기본적으로 이것은 앱에서 실행되고heroku releases 배포된 Git SHA-1을 가져온 다음 현재 분기의 커밋 목록과 비교합니다.

출력이 표시되지 않으면 아직 생산되지 않은 새 커밋이 없는 것입니다. 당신은 무료입니다. 생산은 모두 귀하의 것입니다. 와하하.

좋은 웹페이지 즐겨찾기