使用 PyBuilder 部署到 GCloud 时检查先决条件 "no uncommitted changes"
Check for prerequisite "no uncommitted changes" when deploying to GCloud with 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...我哪里错了?
提前致谢!
在深入研究 PyBuilder
的 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
which return 在 repo 中的当前更改列表中(包括隐藏——记得将 target/*
添加到你的 .gitignore
文件中) .如果列表不为空,我会提出一个 MissingPrerequisiteException
来停止读取 "Missing prerequisite for uncommitted changes required by deploy".
的任务执行
整个任务现在如下所示:
@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 主机地址。希望对您有所帮助!
我正在尝试将任务写入 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...我哪里错了?
提前致谢!
在深入研究 PyBuilder
的 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
which return 在 repo 中的当前更改列表中(包括隐藏——记得将 target/*
添加到你的 .gitignore
文件中) .如果列表不为空,我会提出一个 MissingPrerequisiteException
来停止读取 "Missing prerequisite for uncommitted changes required by deploy".
整个任务现在如下所示:
@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 主机地址。希望对您有所帮助!