Проверьте обязательное условие "нет незавершенных изменений" при развертывании в GCloud с PyBuilder
Я пытаюсь написать задачу deploy
образ Docker для Kubernetes, который проверяет наличие предварительных условий (таких как наличие docker, gcloud и git) и отсутствия незафиксированных изменений.
Вот что я собрал до сих пор:
@task("deploy", description="Deploy the Docker image to Kubernetis")
@depends("build")
def deploy(project, logger):
assert_can_execute(['docker', '-v'], 'docker', 'deploy')
assert_can_execute(['gcloud', '-v'], 'gcloud', 'deploy')
assert_can_execute(['git', '-version'], 'git', 'deploy')
assert_can_execute(['zsh',
'if [[ ! -z $(git diff --stat) ]] || [[ ! -z $(git diff --stat --cached) ]]; then return 127; else return 0; fi'
], 'no uncommitted changes', 'deploy')
logger.info("Deploying Docker image '{0}'".format(project.name))
subprocess.check_output(
'docker build -t <remote>/{0}-service:latest .'.format(project.name), shell=True)
subprocess.check_output(
'gcloud docker -- push <remote>/{0}-service:latest'.format(project.name), shell=True)
Задача на самом деле разворачивается правильно, но я не смог проверить, нет ли незафиксированных изменений для работы... Я не смог найти достаточно документации о assert_can_execute
... Кто-нибудь может помочь?
Инкриминируемое утверждение следующее:
assert_can_execute(['zsh',
'if [[ ! -z $(git diff --stat) ]] || [[ ! -z $(git diff --stat --cached) ]]; then return 127; else return 0; fi'
], 'no uncommitted changes', 'deploy')
Обратите внимание, что если я запускаю код на консоли, я правильно получаю уровень ошибки 0, если нет незафиксированных изменений и 127 в противном случае... Где я ошибаюсь?
Заранее спасибо!
1 ответ
Покопавшись немного больше в PyBuilder
"s utils
а также subprocess
Я закончил с этим решением:
assert_can_execute(['git', '-version'], 'git', 'deploy')
logger.info("Deploying Docker image '{0}'".format(project.name))
if subprocess.check_output('git status --show-stash --short', shell=True):
raise MissingPrerequisiteException('for uncommitted changes', 'deploy')
Более подробно я сначала проверяю наличие git
в командной строке. Затем я уведомляю, что развертывание начинается. В конце концов я бегу git status --show-stash --short
которые возвращаются в списке текущих изменений в репо (включая тайник - не забудьте добавить target/*
на ваш .gitignore
файл). Если список не пустой, я поднимаю MissingPrerequisiteException
остановить выполнение задачи, которое гласит "Отсутствует предварительное условие для незафиксированных изменений, необходимых для развертывания".
Вся задача теперь выглядит следующим образом:
@task("deploy", description="Deploy the Docker image to Kubernetis")
@depends("build")
def deploy(project, logger):
assert_can_execute(['docker', '-v'], 'docker', 'deploy')
assert_can_execute(['gcloud', '-v'], 'gcloud', 'deploy')
assert_can_execute(['git', '-version'], 'git', 'deploy')
logger.info("Deploying Docker image '{0}'".format(project.name))
if subprocess.check_output('git status --show-stash --short', shell=True):
raise MissingPrerequisiteException('for uncommitted changes', 'deploy')
subprocess.check_output(
'docker build -t <remote>/{0}-service:latest .'.format(project.name), shell=True)
subprocess.check_output(
'gcloud docker -- push <remote>/{0}-service:latest'.format(project.name), shell=True)
где <remote>
является адресом хоста Kubernetes. Надеюсь, поможет!