如何删除 Github 环境
How to remove a Github Environment
我的问题是关于清理 Github 存储库上的 "Environments" 选项卡。
我之前通过 Heroku 部署,使用来自两个独立 Github 分支的自动部署(一个用于暂存,一个用于生产)。
这在存储库上创建了一个选项卡 "Environments",其中显示了两个 Heroku 环境 - 完全符合预期。
一旦我开始深入研究 Heroku 管道,我现在已经将应用程序配置为从暂存提升到生产环境,因此生产环境不再从分支自动部署。
我的 Github 存储库中的“环境”选项卡无法删除我不再使用的环境。我似乎无法在 Github 或 Heroku 上找到任何地方来制作 Github "forget" 这个部署环境。
希望我的问题够清楚;如果我能详细说明什么,请告诉我。
不幸的是,'Deployments' 仪表板目前似乎处于测试阶段,这意味着它们可能还没有任何功能。
阅读here。
似乎没有 UI,但您可以使用 GitHub API.
在执行此操作之前,您可能应该断开 GitHub 和 Heroku。
首先,转到您的 GitHub 帐户设置,然后是开发人员设置,然后是个人访问令牌。创建一个允许 repo_deployments 的新令牌。生成后,保存十六进制令牌,即将到来的 API 请求将需要它。
对于这些示例,我假设您的用户名是 $aaaa
,您的存储库名称是 $bbbb
,您的访问令牌是 $tttt
。将这些替换为您的实际用户名和存储库名称以及访问令牌。或者只使用 shell 变量来存储实际值,这样您就可以直接粘贴代码块。
首先,列出您的存储库中的所有部署:
curl https://api.github.com/repos/$aaaa/$bbbb/deployments
每个部署都有一个 id
整数。记下它,并将即将到来的代码块中的 $iiii
替换为该 ID。或者为其创建另一个 shell 变量。
现在您必须为该部署创建“非活动”状态:
curl https://api.github.com/repos/$aaaa/$bbbb/deployments/$iiii/statuses -X POST -d '{"state":"inactive"}' -H 'accept: application/vnd.github.ant-man-preview+json' -H "authorization: token $tttt"
现在您可以永久删除部署:
curl https://api.github.com/repos/$aaaa/$bbbb/deployments/$iiii -X DELETE -H "authorization: token $tttt"
如果您有多个部署,请发送第一个请求以查看所有剩余的部署,然后您也可以根据需要删除它们。
删除所有部署后,GitHub 存储库上的环境按钮将消失。
信息来自 GitHub deployments documentation and the GitHub oauth documentation。这对我有用。
使用@Cadence 的回答,我制作了一个快速而肮脏的 python3 脚本来自动化该过程。只需 运行 它并输入您的信息,所有部署都将被删除,从您的存储库中删除 "Deployments" 选项卡。
查看要点:https://gist.github.com/ewen-lbh/30f8237e218b14f0f40ca5ed13bf24d6
我也做了一点 webpage/script 来自动化这个过程(我没有安装 Python,而且我没有看到其他人已经制作了脚本),并且这是在线的,输入您的信息将自动执行此过程。
Stackblitz - Github Deployments deleter
编辑 18/07/2020:我也将脚本从 Stackblitz 复制到此处的本地代码片段,以防 Stackblitz 消失:
// RECOMMENDED: Disconnect HEROKU from Github before doing this (though not strictly necessary, I think).
//See for more info.
// PARAMETERS
const TOKEN = ""; // MUST BE `repo_deployments` authorized
const REPO = "your-repo"; // e.g. "monorepo"
const USER_OR_ORG = "your-name"; // e.g. "your-name"
// GLOBAL VARS
const URL = `https://api.github.com/repos/${USER_OR_ORG}/${REPO}/deployments`;
const AUTH_HEADER = `token ${TOKEN}`;
// UTILITY FUNCTIONS
const getAllDeployments = () =>
fetch(`${URL}`, {
headers: {
authorization: AUTH_HEADER
}
}).then(val => val.json());
const makeDeploymentInactive = id =>
fetch(`${URL}/${id}/statuses`, {
method: "POST",
body: JSON.stringify({
state: "inactive"
}),
headers: {
"Content-Type": "application/json",
Accept: "application/vnd.github.ant-man-preview+json",
authorization: AUTH_HEADER
}
}).then(() => id);
const deleteDeployment = id =>
fetch(`${URL}/${id}`, {
method: "DELETE",
headers: {
authorization: AUTH_HEADER
}
}).then(() => id);
// MAIN
getAllDeployments()
.catch(console.error)
.then(res => {
console.log(`${res.length} deployments found`);
return res;
})
.then(val => val.map(({
id
}) => id))
.then(ids => Promise.all(ids.map(id => makeDeploymentInactive(id))))
.then(res => {
console.log(`${res.length} deployments marked as "inactive"`);
return res;
})
.then(ids => Promise.all(ids.map(id => deleteDeployment(id))))
.then(res => {
console.log(`${res.length} deployments deleted`);
return res;
})
.then(finalResult => {
const appDiv = document.getElementById("app");
appDiv.innerHTML = `
<h1>CLEANUP RESULT</h1>
<br>
Removed Deployments: ${finalResult.length}
<br>
<br>Ids:<br>
${JSON.stringify(finalResult)}
<br><br><br><br><br><br>
<p>(Open up the console)</p>
`;
});
h1,
h2 {
font-family: Lato;
}
<div id="app">
<h1>Github Deployment's Cleaner</h1>
<p> You need to put the parameters in!</p>
</div>
根据@Cadence 的回答,我构建了以下 bash 脚本。只要设置合适的参数,让它运行.
令牌需要 repo_deployment
OAuth 范围。
env=asd
token=asd
repo=asd
user=asd
for id in $(curl -u $user:$token https://api.github.com/repos/$user/$repo/deployments\?environment\=$env | jq ".[].id"); do
curl -X POST -u $user:$token -d '{"state":"inactive"}' -H 'accept: application/vnd.github.ant-man-preview+json' https://api.github.com/repos/$user/$repo/deployments/$id/statuses
curl -X DELETE -u $user:$token https://api.github.com/repos/$user/$repo/deployments/$id
done
我制作了一个交互式 python 脚本,它可以按名称删除特定环境(这是我的问题)或 所有 部署。检查一下,让我知道它是否适合您:https://github.com/VishalRamesh50/Github-Environment-Cleaner.
即使您有超过 30 个部署,这实际上也会删除您的所有部署,这与此处的其他脚本不同,因为它会遍历来自 Github 的 API 的分页响应数据并且不会'不要只使用第一页。
我不知道这是否已经发布,但我绝对不想手动删除我的 40 多个部署,所以我创建了以下脚本,也可以随意使用它:)
#!/bin/bash
REPO=<your GH name>/<your project name>
TOKEN=<your personal access token>
# https://starkandwayne.com/blog/bash-for-loop-over-json-array-using-jq/
for deployment in $(curl https://api.github.com/repos/$REPO/deployments | jq -r '.[] | @base64'); do
DEPLOYMENT_ID=$(echo "$deployment" | base64 --decode | jq -r '.id')
echo "$DEPLOYMENT_ID"
curl "https://api.github.com/repos/$REPO/deployments/$DEPLOYMENT_ID/statuses" \
-X POST \
-d '{"state":"inactive"}' \
-H 'accept: application/vnd.github.ant-man-preview+json' \
-H "authorization: token $TOKEN"
done
for deployment in $(curl https://api.github.com/repos/$REPO/deployments | jq -r '.[] | @base64'); do
DEPLOYMENT_ID=$(echo "$deployment" | base64 --decode | jq -r '.id')
curl "https://api.github.com/repos/$REPO/deployments/$DEPLOYMENT_ID" \
-X DELETE \
-H "authorization: token $TOKEN"
done
我刚刚使用了这个 Python 脚本:5 分钟后我删除了不需要的环境:
https://github.com/VishalRamesh50/Github-Environment-Cleaner
GitHub 社区中有讨论:https://github.community/t/how-to-remove-the-environment-tab/10584/10?u=aerendir
请为该功能投票。
我构建了一个在线工具来帮助删除部署
我 运行 遇到了同样的问题,发现@spersico 的代码非常方便,但还需要更多 tooling/feedback。我迭代了@spersico 代码以添加一些前端。
与@spersico 的版本相同,所有调用都在客户端进行(并且在您的 console/network 日志中可见)。
项目在 Github 上是开源的,并且在 Netlify 上有一个托管版本,可以立即使用:
https://github-deployment-cleaner.netlify.app/
This will not answer the OP question, I thought it would at first, but it didn't behave as I had expected. Therefore, I'm adding this answer as a community wiki.
GitHub 似乎有两个“环境”概念,OP 的意思是“public 环境”,但 GitHub 似乎也有某种“私有”环境”。
我在下面添加我的经验作为答案,因为它真的很令人困惑。
您可以通过“设置 > 环境”访问“私人环境”。 (例如:https://github.com/UnlyEd/next-right-now/settings/environments
)
然后您可以删除每个环境。它会提示一个确认对话框。确认后,环境将被破坏
我删除了“暂存”和“生产”环境。
但是 public 环境及其所有部署仍然存在。(这不是 OP 想要的)
Public environments 仍然包含“staging”和“production”。
使用GitHub CLI:
org=':org:'
repo=':repo:'
env=':env:'
gh api "repos/${org}/${repo}/deployments?environment=${env}" \
| jq -r ".[].id" \
| xargs -n 1 -I % sh -c "
gh api -X POST -F state=inactive repos/${org}/${repo}/deployments/%/statuses
gh api -X DELETE repos/${org}/${repo}/deployments/%
"
如果 public
,您可以从存储库中删除环境。但是如果是 private
个存储库,您必须将其设为 public 或使用 github API。两者都有效,但这是我删除环境的方法。
我为此创建了一个 npm 包 (here)。只需获取 github 访问令牌,并启用 repo_deployments
范围。
现在 运行 npx delete-github-environment
和 select 您要删除的环境。如果一切顺利,您的环境将被删除。
PS:这是我的 github 回购 - (github),请随时为代码做出贡献。
要删除 Github 环境,请转到设置 -> 环境 -> 并单击要删除的环境旁边的垃圾桶图标(见下图)。
可以从 Github 官方文档中了解更多信息:
Deleting an Environment
我希望你已经得到问题的答案这个答案是为那些不想从 GitHib Repo 中删除环境选项卡的人准备的
据我了解
- 如果要删除屏幕右侧显示的环境选项卡
- 如果要删除特定环境
删除环境选项卡
删除整个选项卡
- 在您的 Repo 页面上单击“设置”按钮
-
取消选中环境上的标记
它将删除右侧的环境选项卡
删除特定环境
用于删除特定环境
- 点击设置
- 点击环境
- 这里可以删除特定环境
我的问题是关于清理 Github 存储库上的 "Environments" 选项卡。
我之前通过 Heroku 部署,使用来自两个独立 Github 分支的自动部署(一个用于暂存,一个用于生产)。
这在存储库上创建了一个选项卡 "Environments",其中显示了两个 Heroku 环境 - 完全符合预期。
一旦我开始深入研究 Heroku 管道,我现在已经将应用程序配置为从暂存提升到生产环境,因此生产环境不再从分支自动部署。
我的 Github 存储库中的“环境”选项卡无法删除我不再使用的环境。我似乎无法在 Github 或 Heroku 上找到任何地方来制作 Github "forget" 这个部署环境。
希望我的问题够清楚;如果我能详细说明什么,请告诉我。
不幸的是,'Deployments' 仪表板目前似乎处于测试阶段,这意味着它们可能还没有任何功能。
阅读here。
似乎没有 UI,但您可以使用 GitHub API.
在执行此操作之前,您可能应该断开 GitHub 和 Heroku。
首先,转到您的 GitHub 帐户设置,然后是开发人员设置,然后是个人访问令牌。创建一个允许 repo_deployments 的新令牌。生成后,保存十六进制令牌,即将到来的 API 请求将需要它。
对于这些示例,我假设您的用户名是 $aaaa
,您的存储库名称是 $bbbb
,您的访问令牌是 $tttt
。将这些替换为您的实际用户名和存储库名称以及访问令牌。或者只使用 shell 变量来存储实际值,这样您就可以直接粘贴代码块。
首先,列出您的存储库中的所有部署:
curl https://api.github.com/repos/$aaaa/$bbbb/deployments
每个部署都有一个 id
整数。记下它,并将即将到来的代码块中的 $iiii
替换为该 ID。或者为其创建另一个 shell 变量。
现在您必须为该部署创建“非活动”状态:
curl https://api.github.com/repos/$aaaa/$bbbb/deployments/$iiii/statuses -X POST -d '{"state":"inactive"}' -H 'accept: application/vnd.github.ant-man-preview+json' -H "authorization: token $tttt"
现在您可以永久删除部署:
curl https://api.github.com/repos/$aaaa/$bbbb/deployments/$iiii -X DELETE -H "authorization: token $tttt"
如果您有多个部署,请发送第一个请求以查看所有剩余的部署,然后您也可以根据需要删除它们。
删除所有部署后,GitHub 存储库上的环境按钮将消失。
信息来自 GitHub deployments documentation and the GitHub oauth documentation。这对我有用。
使用@Cadence 的回答,我制作了一个快速而肮脏的 python3 脚本来自动化该过程。只需 运行 它并输入您的信息,所有部署都将被删除,从您的存储库中删除 "Deployments" 选项卡。
查看要点:https://gist.github.com/ewen-lbh/30f8237e218b14f0f40ca5ed13bf24d6
我也做了一点 webpage/script 来自动化这个过程(我没有安装 Python,而且我没有看到其他人已经制作了脚本),并且这是在线的,输入您的信息将自动执行此过程。
Stackblitz - Github Deployments deleter
编辑 18/07/2020:我也将脚本从 Stackblitz 复制到此处的本地代码片段,以防 Stackblitz 消失:
// RECOMMENDED: Disconnect HEROKU from Github before doing this (though not strictly necessary, I think).
//See for more info.
// PARAMETERS
const TOKEN = ""; // MUST BE `repo_deployments` authorized
const REPO = "your-repo"; // e.g. "monorepo"
const USER_OR_ORG = "your-name"; // e.g. "your-name"
// GLOBAL VARS
const URL = `https://api.github.com/repos/${USER_OR_ORG}/${REPO}/deployments`;
const AUTH_HEADER = `token ${TOKEN}`;
// UTILITY FUNCTIONS
const getAllDeployments = () =>
fetch(`${URL}`, {
headers: {
authorization: AUTH_HEADER
}
}).then(val => val.json());
const makeDeploymentInactive = id =>
fetch(`${URL}/${id}/statuses`, {
method: "POST",
body: JSON.stringify({
state: "inactive"
}),
headers: {
"Content-Type": "application/json",
Accept: "application/vnd.github.ant-man-preview+json",
authorization: AUTH_HEADER
}
}).then(() => id);
const deleteDeployment = id =>
fetch(`${URL}/${id}`, {
method: "DELETE",
headers: {
authorization: AUTH_HEADER
}
}).then(() => id);
// MAIN
getAllDeployments()
.catch(console.error)
.then(res => {
console.log(`${res.length} deployments found`);
return res;
})
.then(val => val.map(({
id
}) => id))
.then(ids => Promise.all(ids.map(id => makeDeploymentInactive(id))))
.then(res => {
console.log(`${res.length} deployments marked as "inactive"`);
return res;
})
.then(ids => Promise.all(ids.map(id => deleteDeployment(id))))
.then(res => {
console.log(`${res.length} deployments deleted`);
return res;
})
.then(finalResult => {
const appDiv = document.getElementById("app");
appDiv.innerHTML = `
<h1>CLEANUP RESULT</h1>
<br>
Removed Deployments: ${finalResult.length}
<br>
<br>Ids:<br>
${JSON.stringify(finalResult)}
<br><br><br><br><br><br>
<p>(Open up the console)</p>
`;
});
h1,
h2 {
font-family: Lato;
}
<div id="app">
<h1>Github Deployment's Cleaner</h1>
<p> You need to put the parameters in!</p>
</div>
根据@Cadence 的回答,我构建了以下 bash 脚本。只要设置合适的参数,让它运行.
令牌需要 repo_deployment
OAuth 范围。
env=asd
token=asd
repo=asd
user=asd
for id in $(curl -u $user:$token https://api.github.com/repos/$user/$repo/deployments\?environment\=$env | jq ".[].id"); do
curl -X POST -u $user:$token -d '{"state":"inactive"}' -H 'accept: application/vnd.github.ant-man-preview+json' https://api.github.com/repos/$user/$repo/deployments/$id/statuses
curl -X DELETE -u $user:$token https://api.github.com/repos/$user/$repo/deployments/$id
done
我制作了一个交互式 python 脚本,它可以按名称删除特定环境(这是我的问题)或 所有 部署。检查一下,让我知道它是否适合您:https://github.com/VishalRamesh50/Github-Environment-Cleaner.
即使您有超过 30 个部署,这实际上也会删除您的所有部署,这与此处的其他脚本不同,因为它会遍历来自 Github 的 API 的分页响应数据并且不会'不要只使用第一页。
我不知道这是否已经发布,但我绝对不想手动删除我的 40 多个部署,所以我创建了以下脚本,也可以随意使用它:)
#!/bin/bash
REPO=<your GH name>/<your project name>
TOKEN=<your personal access token>
# https://starkandwayne.com/blog/bash-for-loop-over-json-array-using-jq/
for deployment in $(curl https://api.github.com/repos/$REPO/deployments | jq -r '.[] | @base64'); do
DEPLOYMENT_ID=$(echo "$deployment" | base64 --decode | jq -r '.id')
echo "$DEPLOYMENT_ID"
curl "https://api.github.com/repos/$REPO/deployments/$DEPLOYMENT_ID/statuses" \
-X POST \
-d '{"state":"inactive"}' \
-H 'accept: application/vnd.github.ant-man-preview+json' \
-H "authorization: token $TOKEN"
done
for deployment in $(curl https://api.github.com/repos/$REPO/deployments | jq -r '.[] | @base64'); do
DEPLOYMENT_ID=$(echo "$deployment" | base64 --decode | jq -r '.id')
curl "https://api.github.com/repos/$REPO/deployments/$DEPLOYMENT_ID" \
-X DELETE \
-H "authorization: token $TOKEN"
done
我刚刚使用了这个 Python 脚本:5 分钟后我删除了不需要的环境:
https://github.com/VishalRamesh50/Github-Environment-Cleaner
GitHub 社区中有讨论:https://github.community/t/how-to-remove-the-environment-tab/10584/10?u=aerendir
请为该功能投票。
我构建了一个在线工具来帮助删除部署
我 运行 遇到了同样的问题,发现@spersico 的代码非常方便,但还需要更多 tooling/feedback。我迭代了@spersico 代码以添加一些前端。 与@spersico 的版本相同,所有调用都在客户端进行(并且在您的 console/network 日志中可见)。
项目在 Github 上是开源的,并且在 Netlify 上有一个托管版本,可以立即使用: https://github-deployment-cleaner.netlify.app/
This will not answer the OP question, I thought it would at first, but it didn't behave as I had expected. Therefore, I'm adding this answer as a community wiki.
GitHub 似乎有两个“环境”概念,OP 的意思是“public 环境”,但 GitHub 似乎也有某种“私有”环境”。
我在下面添加我的经验作为答案,因为它真的很令人困惑。
您可以通过“设置 > 环境”访问“私人环境”。 (例如:https://github.com/UnlyEd/next-right-now/settings/environments
)
然后您可以删除每个环境。它会提示一个确认对话框。确认后,环境将被破坏
我删除了“暂存”和“生产”环境。
但是 public 环境及其所有部署仍然存在。(这不是 OP 想要的)
Public environments 仍然包含“staging”和“production”。
使用GitHub CLI:
org=':org:'
repo=':repo:'
env=':env:'
gh api "repos/${org}/${repo}/deployments?environment=${env}" \
| jq -r ".[].id" \
| xargs -n 1 -I % sh -c "
gh api -X POST -F state=inactive repos/${org}/${repo}/deployments/%/statuses
gh api -X DELETE repos/${org}/${repo}/deployments/%
"
如果 public
,您可以从存储库中删除环境。但是如果是 private
个存储库,您必须将其设为 public 或使用 github API。两者都有效,但这是我删除环境的方法。
我为此创建了一个 npm 包 (here)。只需获取 github 访问令牌,并启用 repo_deployments
范围。
现在 运行 npx delete-github-environment
和 select 您要删除的环境。如果一切顺利,您的环境将被删除。
PS:这是我的 github 回购 - (github),请随时为代码做出贡献。
要删除 Github 环境,请转到设置 -> 环境 -> 并单击要删除的环境旁边的垃圾桶图标(见下图)。
可以从 Github 官方文档中了解更多信息:
Deleting an Environment
我希望你已经得到问题的答案这个答案是为那些不想从 GitHib Repo 中删除环境选项卡的人准备的
据我了解
- 如果要删除屏幕右侧显示的环境选项卡
- 如果要删除特定环境
删除环境选项卡
删除整个选项卡- 在您的 Repo 页面上单击“设置”按钮
-
取消选中环境上的标记
它将删除右侧的环境选项卡
删除特定环境
用于删除特定环境- 点击设置
- 点击环境
- 这里可以删除特定环境