如何以编程方式查找和删除通过 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();
我的目标是找到并删除我之前通过 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();