0

我正在尝试向 Kubernetes 的 Docker 映像写入一个任务,该任务deploy检查是否存在先决条件(例如是否存在 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……我错在哪里?

提前致谢!

4

1 回答 1

0

在深入研究PyBuilder's utilsandsubprocess之后,我最终得到了这个解决方案:

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在 repo 中的当前更改列表中运行 which return(包括存储——记得添加target/*到您的.gitignore文件中)。如果列表不为空,我会提出 aMissingPrerequisiteException以停止任务执行,该任务显示为“Missing 先决条件,用于部署所需的未提交更改”

整个任务现在如下所示:

@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 主机地址在哪里。希望能帮助到你!

于 2018-03-01T12:19:05.410 回答