首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何动态标记container_image?

如何动态标记container_image?
EN

Stack Overflow用户
提问于 2022-01-05 23:21:23
回答 3查看 1.3K关注 0票数 1

我对巴泽尔世界有点陌生。我的目标是标记并将图像推送到注册表,但使用动态标记。没有Bazel,我以前用git提交SHA(6-7个字符)作为后缀,例如。1.0.0-a68hg4 --我想对container_push规则做同样的事情。

代码语言:javascript
运行
复制
container_push(
    name = "publish",
    format = "Docker",
    image = ":image",
    registry = DOCKER_REGISTRY,
    repository = "app1",
    skip_unchanged_digest = True,
    tag_file = "image.json.sha256",
)

这里复制的代码。我可以使用SHA,这使得我的标记在构建之间是唯一的,但是我可以加入字符串来做我想做的事情。即1.0.0-a68h4 (-)

提前感谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-01-06 00:13:27

感谢Brain Silverman的详细答复。

如果有人在寻找一个简单的解决方案,就在这里。

build.sh(将码头图像推送到注册表的脚本)

代码语言:javascript
运行
复制
version="1.0.0"

docker login -u "$USERNAME" -p "$PASSWORD" "$REGISTRY"

bazel run --workspace_status_command="echo VERSION $version-$(git rev-parse HEAD | cut -c 1-8)" //docker: publish

BUILD.bazel

代码语言:javascript
运行
复制
container_push(
    name = "publish",
    format = "Docker",
    image = ":image",
    registry = DOCKER_REGISTRY,
    repository = "app1",
    skip_unchanged_digest = True,
    tag_file = "{VERSION}",
)
票数 1
EN

Stack Overflow用户

发布于 2022-01-05 23:45:14

您可以通过冲压 (即docker )获得git提交。例如,将其放在workspace_status.sh

代码语言:javascript
运行
复制
#!/bin/bash
echo "STABLE_GIT_COMMIT $(git rev-parse HEAD)"

然后,如果使用--workspace_status_command=workspace_status.sh进行构建,则可以编写tag = "something-{STABLE_GIT_COMMIT}" (并在container_push上设置stamp = True )。如果您想要包含当前标记或分支的名称,可以使用git describe而不是git rev-parse

如果您想要将它与sha256组合起来,我将使用一个派生规则来创建这样一个文件:

代码语言:javascript
运行
复制
genrule(
    name = "create_tag_file",
    srcs = [
        "image.json.sha256",
    ],
    stamp = True,
    outs = [ "my_tag_file" ],
    cmd = "cat $(location image.json.sha256) > $@ && cat bazel-out/volatile-status.txt | grep STABLE_GIT_COMMIT | awk '{print $2}' >> $@",
)

container_push(
    <same as before>
    tag_file = ":my_tag_file",
)

在一个单独的文件中编写一个脚本(将它放在tools中,并使用$(location)来获得运行它的位置)将使字符串操作比将其放在cmd属性中的所有内联操作更容易阅读。

如果要添加任意标识字符串作为标记的一部分,那么bazel命令行上的标签将在BUILD_EMBED_LABEL键中设置BUILD_EMBED_LABEL键。

票数 2
EN

Stack Overflow用户

发布于 2022-01-17 23:36:01

对于快照,我建议基于源文件的SHA256进行版本控制。使用这种方法,只有当图像的内容真正发生变化时,才会发布新的标记。

看一看https://github.com/mgosk/bazel-scala-example/blob/master/example-bin/BUILD

代码语言:javascript
运行
复制
# https://github.com/mgosk/bazel-scala-example/blob/master/example-bin/BUILD
git_tag_with_sha_multitargets(
    name = "version",
    targets = [
        ":image",
        "@java_base//image",
    ],
)

container_push(
    name = "image-push",
    format = "Docker",
    image = ":image",
    registry = "docker.io",
    repository = "mgosk/example-bin",
    tag_file = ":version",
)

# https://github.com/mgosk/bazel-scala-example/blob/master/tools/version.bzl
def git_tag_with_sha_multitargets(name, targets, postfix = "", **kwargs):
    super_stable_status = "//:super_stable_status"
    native.genrule(
        name = name,
        srcs = targets + [super_stable_status],
        outs = [name + ".txt"],
        cmd = """
            STABLE_RELEASE_VERSION=$$(cat $(location """ + super_stable_status + """) | grep 'STABLE_RELEASE_VERSION' | awk '{print $$2}' || :)
            POSTFIX=""" + postfix + """
            if [[ -z "$$STABLE_RELEASE_VERSION" ]]; then
              SHA256=$$(sha256sum $(location """ + " ) $(location ".join(targets) + """) | awk '{print $$1;}' | sha256sum | awk '{print $$1;}')
              echo $$SHA256-SNAPSHOT > $(OUTS);
            else
              echo $$STABLE_RELEASE_VERSION$$POSTFIX > $(OUTS);
            fi
            """,
        **kwargs
    )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70600734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档