fix(jenkins): avoid rawBuild in deploy gate
This commit is contained in:
@@ -20,6 +20,7 @@
|
|||||||
4. `部署` 流水线额外校验上游作业名与传入的 `EXPECTED_UPSTREAM_JOB` 一致;如配置了环境变量 `GENARRATIVE_ALLOWED_UPSTREAM_JOB`,还必须与该值一致。
|
4. `部署` 流水线额外校验上游作业名与传入的 `EXPECTED_UPSTREAM_JOB` 一致;如配置了环境变量 `GENARRATIVE_ALLOWED_UPSTREAM_JOB`,还必须与该值一致。
|
||||||
5. `构建并部署` 在触发 `部署` 前先释放自己的构建节点,避免单执行器节点出现死锁。
|
5. `构建并部署` 在触发 `部署` 前先释放自己的构建节点,避免单执行器节点出现死锁。
|
||||||
6. `部署` 不重新构建,不重新上传,不从 Jenkins 插件仓库复制产物,直接使用上游构建节点的本地 `build/<版本号>/` 目录。
|
6. `部署` 不重新构建,不重新上传,不从 Jenkins 插件仓库复制产物,直接使用上游构建节点的本地 `build/<版本号>/` 目录。
|
||||||
|
7. `部署` 流水线读取触发原因时必须使用 `currentBuild.getBuildCauses('hudson.model.Cause$UpstreamCause')` 这类白名单方法,不能直接访问 `currentBuild.rawBuild`,否则会被 Jenkins Script Security 拦截。
|
||||||
|
|
||||||
## 3. 节点与工作区要求
|
## 3. 节点与工作区要求
|
||||||
|
|
||||||
|
|||||||
@@ -22,12 +22,14 @@ pipeline {
|
|||||||
|
|
||||||
steps {
|
steps {
|
||||||
script {
|
script {
|
||||||
def upstreamCause = currentBuild.rawBuild.getCause(hudson.model.Cause$UpstreamCause)
|
// 使用 RunWrapper 白名单方法读取触发原因,避免触发 Jenkins Script Security 审批。
|
||||||
if (upstreamCause == null) {
|
def upstreamCauses = currentBuild.getBuildCauses('hudson.model.Cause$UpstreamCause')
|
||||||
|
if (!upstreamCauses || upstreamCauses.isEmpty()) {
|
||||||
error('部署流水线禁止人工直接执行,只允许由上游构建并部署流水线触发。')
|
error('部署流水线禁止人工直接执行,只允许由上游构建并部署流水线触发。')
|
||||||
}
|
}
|
||||||
|
|
||||||
def actualUpstreamJob = upstreamCause.upstreamProject ?: ''
|
def upstreamCause = upstreamCauses[0]
|
||||||
|
def actualUpstreamJob = upstreamCause?.upstreamProject ?: ''
|
||||||
def expectedUpstreamJob = params.EXPECTED_UPSTREAM_JOB?.trim()
|
def expectedUpstreamJob = params.EXPECTED_UPSTREAM_JOB?.trim()
|
||||||
def allowedUpstreamJob = env.GENARRATIVE_ALLOWED_UPSTREAM_JOB?.trim()
|
def allowedUpstreamJob = env.GENARRATIVE_ALLOWED_UPSTREAM_JOB?.trim()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user