如何验证子模块哈希是否被推送到远程?
How to verify if the submodule hash is pushed to the remote?
我有一个包含许多子模块的 monorepo,每次在我的 monrepo 上提出 PR 以更新子模块的哈希值时,我需要 运行 一个 jenkins 作业来查看源分支中的哈希值是否PR 位于子模块的远程位置。
这是为了避免在构建子模块时失败(因为有时人们无法将更改提交到远程,但仍会更新哈希)
- 最快的方法是运行并行执行一些命令
- 这些命令是什么?
提前致谢
git clone <url> --branch $PR_SOURCE_BRANCH --single-branch <somefoldername>
after this??
正如@joanis 先生在评论中所建议的那样,我将注意力从 git 命令转移到了 bitbucket rest API,并且响应很快
node {
//SCM checkout
stage('Perform Hash check') {
cleanWs()
sh "git clone <url> --branch $PR_SOURCE_BRANCH --single-branch <somefoldername>"
dir(<somefoldername>) {
def map = [:]
def commitList = sh( script:"(git submodule status | awk '{ print $1 \" \" $2 }')",returnStdout: true).replace("-","").split("\n")
commitList.each {
map[it.split(" ")[0].trim()] = it.split(" ")[1].trim()
}
map.each { commitid, reponame ->
def url = "https://api.bitbucket.org/2.0/repositories/reposlug/$reponame/commits/$commitid"
final def (String response, int code) = sh(script: "curl -s -w '\n%{response_code}' -u username:app-password $url", returnStdout: true).trim().tokenize("\n")
if (code != 200) {
error()
}
}
}
}
}
将我的评论提升为答案,因为解决方案有效。
做一些研究,我找不到 Git 命令来做你想做的事,但如果你的 Git 服务器包含一个 repo 浏览界面,就像 GitHub 那样,正在尝试获取
https://github.com/<space>/<repo>/commit/<hash>
成功时给你 200,失败时给你 404,从而告诉你提交是否存在。
由于此页面仅指向提交中文件的索引,但不包含任何实际内容,因此这应该是一个非常有效的检查。
我有一个包含许多子模块的 monorepo,每次在我的 monrepo 上提出 PR 以更新子模块的哈希值时,我需要 运行 一个 jenkins 作业来查看源分支中的哈希值是否PR 位于子模块的远程位置。
这是为了避免在构建子模块时失败(因为有时人们无法将更改提交到远程,但仍会更新哈希)
- 最快的方法是运行并行执行一些命令
- 这些命令是什么?
提前致谢
git clone <url> --branch $PR_SOURCE_BRANCH --single-branch <somefoldername>
after this??
正如@joanis 先生在评论中所建议的那样,我将注意力从 git 命令转移到了 bitbucket rest API,并且响应很快
node {
//SCM checkout
stage('Perform Hash check') {
cleanWs()
sh "git clone <url> --branch $PR_SOURCE_BRANCH --single-branch <somefoldername>"
dir(<somefoldername>) {
def map = [:]
def commitList = sh( script:"(git submodule status | awk '{ print $1 \" \" $2 }')",returnStdout: true).replace("-","").split("\n")
commitList.each {
map[it.split(" ")[0].trim()] = it.split(" ")[1].trim()
}
map.each { commitid, reponame ->
def url = "https://api.bitbucket.org/2.0/repositories/reposlug/$reponame/commits/$commitid"
final def (String response, int code) = sh(script: "curl -s -w '\n%{response_code}' -u username:app-password $url", returnStdout: true).trim().tokenize("\n")
if (code != 200) {
error()
}
}
}
}
}
将我的评论提升为答案,因为解决方案有效。
做一些研究,我找不到 Git 命令来做你想做的事,但如果你的 Git 服务器包含一个 repo 浏览界面,就像 GitHub 那样,正在尝试获取
https://github.com/<space>/<repo>/commit/<hash>
成功时给你 200,失败时给你 404,从而告诉你提交是否存在。
由于此页面仅指向提交中文件的索引,但不包含任何实际内容,因此这应该是一个非常有效的检查。