如何以编程方式查找和删除通过 Google Cloud Build 使用 googleapis Artifacts API 构建的容器映像?

How do I programmatically find and delete a container image built through Google Cloud Build with the googleapis Artifacts API?

我的目标是找到并删除我之前通过 Google Cloud Build(通过 Node googleapis 库,使用工件 API)构建的 Docker 容器映像。我在构建容器时将信息传回给我,我想通过 Node googleapis 库将其删除。

Cloud Build 返回的图像路径如下所示:“us-central1-docker.pkg.dev/project-1234/dev/foo:bar”

我尝试删除工件失败,如下所示:

const artifacts = artifactregistry({ version: 'v1beta2', auth: authClient});
await artifacts.projects.locations.repositories.packages.delete({name: config.containerLocation})

这会导致错误:请求的 URL /v1beta2/us-central1-docker.pkg.dev/project-1234/dev/foo:在此服务器上找不到栏。看来我没有正确指定位置,但不清楚如何解决。

我该如何删除图片?

我能够使用 Artifact Registry Cloud Client Library 删除包,因为这是现在推荐的访问 API 的方式,因为它更易于使用且有详细记录。参见 Cloud Client Library docs

下面的代码展示了如何在 Artifact Registry 中删除包,前提是您已经知道要删除的包。这在 namePackage 变量中定义并传递给 callDeletePackage(),它将调用 deletePackage() 以继续删除。

const {ArtifactRegistryClient} = require('@google-cloud/artifact-registry');
        const client = new ArtifactRegistryClient();
async function main() {

        const projectId = 'project-id';
        const location = 'us-central1';
        const repositoryName = 'your-repository-name';
        const packageName = 'your-package-name';
        var namePackage = `projects/${projectId}/locations/${location}/repositories/${repositoryName}/packages/${packageName}`;
      
        callDeletePackage(namePackage);

}
async function callDeletePackage(name) {
        const deletePack = await client.deletePackage({name: name});
        console.log(deletePack);
}
main();

如果您需要以编程方式获取您的存储库和包,您可以查看此代码。它有 listsRepositories()listsPackages()callDeletePackage()

  • listsRepositories() 列出可用的仓库,您可以选择哪个仓库有要删除的包。
  • listsPackages() 列出所选存储库的包
  • callDeletePackage()删除包。

下面的代码只是获取存储库和包的返回列表中的第一个元素,然后删除。如何让你想要的包被删除取决于你。

const {ArtifactRegistryClient} = require('@google-cloud/artifact-registry');
        const client = new ArtifactRegistryClient();
async function main() {

        const projectId = 'your-project-id';
        const location = 'us-central1';
        var parentRepo = `projects/${projectId}/locations/${location}`;

        names = await listsRepositories(parentRepo);
        var nameRepo = names[0];
        console.log(nameRepo);
        var repos = await listsPackages(nameRepo);
        console.log(repos[0])
        callDeletePackage(repos[0]);
}
async function listsRepositories(parent) {
        var nameArr = []
        const repositories = await client.listRepositories({parent : parent});
        const repo = repositories[0];
        for (const data in repo) {
                nameArr.push(repo[data].name);
        }
        return nameArr;
}

async function listsPackages(parent) {
        var namePackArr = []
        const packages = await client.listPackages({parent : parent});
        const pack = packages[0];
        for (const data in pack) {
                namePackArr.push(pack[data].name);
        }
        return namePackArr;
}

async function callDeletePackage(name) {
        const deletePack = await client.deletePackage({name: name});
        console.log(deletePack);
}

main();