From 30453cb20a5f343ef65aacc8fb459c224f05a623 Mon Sep 17 00:00:00 2001 From: royalhuang Date: Thu, 19 Sep 2024 17:14:21 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E6=8E=A8=E8=8D=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=8F=B7=E4=BC=98=E5=8C=96=20#10958=20=E6=8E=A8?= =?UTF-8?q?=E8=8D=90=E7=89=88=E6=9C=AC=E5=8F=B7=E5=9C=A8=E7=BC=96=E6=8E=92?= =?UTF-8?q?=E4=B8=AD=E7=BB=B4=E6=8A=A4=E5=88=9D=E5=A7=8B=E5=80=BC=EF=BC=8C?= =?UTF-8?q?=E5=9C=A8db=E4=B8=AD=E7=BB=B4=E6=8A=A4=E5=BD=93=E5=89=8D?= =?UTF-8?q?=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../process/yaml/transfer/VariableTransfer.kt | 17 +++++---- .../devops/common/pipeline/pojo/BuildNo.kt | 5 +-- .../common/pipeline/pojo/BuildNoUpdateReq.kt | 36 +++++++++++++++++++ .../api/user/UserPipelineVersionResource.kt | 18 ++++++++++ .../devops/process/enums/OperationLogType.kt | 1 + .../engine/dao/PipelineBuildSummaryDao.kt | 5 +-- .../service/PipelineBuildDetailService.kt | 5 ++- .../service/PipelineRepositoryService.kt | 6 ++-- .../record/PipelineBuildRecordService.kt | 6 ++-- .../api/UserPipelineVersionResourceImpl.kt | 16 +++++++++ .../pipeline/MQPipelineUpdateListener.kt | 4 +-- .../service/PipelineInfoFacadeService.kt | 35 +++++++++++++++--- .../service/PipelineVersionFacadeService.kt | 5 ++- .../builds/PipelineBuildFacadeService.kt | 9 +++-- .../service/template/TemplateFacadeService.kt | 12 +++---- .../i18n/process/message_en_US.properties | 3 +- .../i18n/process/message_zh_CN.properties | 1 + 17 files changed, 143 insertions(+), 41 deletions(-) create mode 100644 src/backend/ci/core/common/common-pipeline/src/main/kotlin/com/tencent/devops/common/pipeline/pojo/BuildNoUpdateReq.kt diff --git a/src/backend/ci/core/common/common-pipeline-yaml/src/main/kotlin/com/tencent/devops/process/yaml/transfer/VariableTransfer.kt b/src/backend/ci/core/common/common-pipeline-yaml/src/main/kotlin/com/tencent/devops/process/yaml/transfer/VariableTransfer.kt index 78588851f4f..5bd9295c362 100644 --- a/src/backend/ci/core/common/common-pipeline-yaml/src/main/kotlin/com/tencent/devops/process/yaml/transfer/VariableTransfer.kt +++ b/src/backend/ci/core/common/common-pipeline-yaml/src/main/kotlin/com/tencent/devops/process/yaml/transfer/VariableTransfer.kt @@ -164,16 +164,15 @@ class VariableTransfer { fun makeRecommendedVersion(model: Model): RecommendedVersion? { val triggerContainer = model.stages[0].containers[0] as TriggerContainer - val res = if (triggerContainer.buildNo != null) { - with(triggerContainer.buildNo) { - RecommendedVersion( - enabled = true, allowModifyAtStartup = this!!.required, buildNo = RecommendedVersion.BuildNo( - this.buildNo, - RecommendedVersion.Strategy.parse(this.buildNoType).alis - ) + val res = triggerContainer.buildNo?.let { + RecommendedVersion( + enabled = true, + allowModifyAtStartup = it.required, + buildNo = RecommendedVersion.BuildNo( + it.buildNo, RecommendedVersion.Strategy.parse(it.buildNoType).alis ) - } - } else return null + ) + } ?: return null (model.stages[0].containers[0] as TriggerContainer).params.forEach { if (it.id == MAJORVERSION || it.id == "MajorVersion") { diff --git a/src/backend/ci/core/common/common-pipeline/src/main/kotlin/com/tencent/devops/common/pipeline/pojo/BuildNo.kt b/src/backend/ci/core/common/common-pipeline/src/main/kotlin/com/tencent/devops/common/pipeline/pojo/BuildNo.kt index beda8c2453f..f4fcb9e7eba 100644 --- a/src/backend/ci/core/common/common-pipeline/src/main/kotlin/com/tencent/devops/common/pipeline/pojo/BuildNo.kt +++ b/src/backend/ci/core/common/common-pipeline/src/main/kotlin/com/tencent/devops/common/pipeline/pojo/BuildNo.kt @@ -28,9 +28,10 @@ package com.tencent.devops.common.pipeline.pojo data class BuildNo( - var buildNo: Int, + var buildNo: Int, // 用于保存编排中定义的构建号初始值 val buildNoType: BuildNoType, - var required: Boolean? = false + var required: Boolean? = false, + var currentBuildNo: Int? = null // 用于替换当前的最新值,如果是创建流水线则不传值 ) enum class BuildNoType { diff --git a/src/backend/ci/core/common/common-pipeline/src/main/kotlin/com/tencent/devops/common/pipeline/pojo/BuildNoUpdateReq.kt b/src/backend/ci/core/common/common-pipeline/src/main/kotlin/com/tencent/devops/common/pipeline/pojo/BuildNoUpdateReq.kt new file mode 100644 index 00000000000..d02815de140 --- /dev/null +++ b/src/backend/ci/core/common/common-pipeline/src/main/kotlin/com/tencent/devops/common/pipeline/pojo/BuildNoUpdateReq.kt @@ -0,0 +1,36 @@ +/* + * Tencent is pleased to support the open source community by making BK-CI 蓝鲸持续集成平台 available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * BK-CI 蓝鲸持续集成平台 is licensed under the MIT license. + * + * A copy of the MIT License is included in this file. + * + * + * Terms of the MIT License: + * --------------------------------------------------- + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated + * documentation files (the "Software"), to deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of + * the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT + * LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN + * NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +package com.tencent.devops.common.pipeline.pojo + +import io.swagger.v3.oas.annotations.media.Schema + +@Schema(title = "流水线构建推荐版本号更新") +data class BuildNoUpdateReq( + @get:Schema(title = "推荐版本号buildNo当前值", required = true) + val currentBuildNo: Int +) diff --git a/src/backend/ci/core/process/api-process/src/main/kotlin/com/tencent/devops/process/api/user/UserPipelineVersionResource.kt b/src/backend/ci/core/process/api-process/src/main/kotlin/com/tencent/devops/process/api/user/UserPipelineVersionResource.kt index 560392ba7d1..952e48e7e16 100644 --- a/src/backend/ci/core/process/api-process/src/main/kotlin/com/tencent/devops/process/api/user/UserPipelineVersionResource.kt +++ b/src/backend/ci/core/process/api-process/src/main/kotlin/com/tencent/devops/process/api/user/UserPipelineVersionResource.kt @@ -33,6 +33,7 @@ import com.tencent.devops.common.api.pojo.Page import com.tencent.devops.common.api.pojo.Result import com.tencent.devops.common.pipeline.PipelineVersionWithModel import com.tencent.devops.common.pipeline.PipelineVersionWithModelRequest +import com.tencent.devops.common.pipeline.pojo.BuildNoUpdateReq import com.tencent.devops.common.pipeline.pojo.TemplateInstanceCreateRequest import com.tencent.devops.common.pipeline.pojo.transfer.PreviewResponse import com.tencent.devops.process.pojo.PipelineDetail @@ -334,4 +335,21 @@ interface UserPipelineVersionResource { @QueryParam("storageType") storageType: String? ): Response + + @Operation(summary = "重置流水线推荐版本号") + @POST + @Path("/projects/{projectId}/pipelines/{pipelineId}/updateBuildNo") + fun updateBuildNo( + @Parameter(description = "用户ID", required = true, example = AUTH_HEADER_USER_ID_DEFAULT_VALUE) + @HeaderParam(AUTH_HEADER_USER_ID) + userId: String, + @Parameter(description = "项目ID", required = true) + @PathParam("projectId") + projectId: String, + @Parameter(description = "流水线ID", required = true) + @PathParam("pipelineId") + pipelineId: String, + @Parameter(description = "流水线构建推荐版本号更新", required = true) + buildNo: BuildNoUpdateReq + ): Result } diff --git a/src/backend/ci/core/process/api-process/src/main/kotlin/com/tencent/devops/process/enums/OperationLogType.kt b/src/backend/ci/core/process/api-process/src/main/kotlin/com/tencent/devops/process/enums/OperationLogType.kt index f16f5d288e5..3fc8394e2d5 100644 --- a/src/backend/ci/core/process/api-process/src/main/kotlin/com/tencent/devops/process/enums/OperationLogType.kt +++ b/src/backend/ci/core/process/api-process/src/main/kotlin/com/tencent/devops/process/enums/OperationLogType.kt @@ -43,6 +43,7 @@ enum class OperationLogType(val description: String) { ADD_PIPELINE_TO_GROUP("将流水线添加到流水线组时:「添加到流水线组 a」"), MOVE_PIPELINE_OUT_OF_GROUP("将流水线移出流水线组时:「从流水线组 a 中移出」"), UPDATE_PIPELINE_SETTING("修改流水线设置:「修改配置新增版本 P2.T1.2」"), + RESET_RECOMMENDED_VERSION_BUILD_NO("重置流水线推荐版本号:「重置流水线推荐版本号为 xxx」"), NORMAL_SAVE_OPERATION("普通保存操作"); fun getI18n(language: String): String { diff --git a/src/backend/ci/core/process/biz-base/src/main/kotlin/com/tencent/devops/process/engine/dao/PipelineBuildSummaryDao.kt b/src/backend/ci/core/process/biz-base/src/main/kotlin/com/tencent/devops/process/engine/dao/PipelineBuildSummaryDao.kt index a4829972d63..b1350b17b6a 100644 --- a/src/backend/ci/core/process/biz-base/src/main/kotlin/com/tencent/devops/process/engine/dao/PipelineBuildSummaryDao.kt +++ b/src/backend/ci/core/process/biz-base/src/main/kotlin/com/tencent/devops/process/engine/dao/PipelineBuildSummaryDao.kt @@ -103,11 +103,12 @@ class PipelineBuildSummaryDao { fun resetDebugInfo( dslContext: DSLContext, projectId: String, - pipelineId: String + pipelineId: String, + debugBuildNo: Int ) { with(T_PIPELINE_BUILD_SUMMARY) { dslContext.update(this) - .set(DEBUG_BUILD_NO, 0) + .set(DEBUG_BUILD_NO, debugBuildNo) .set(DEBUG_BUILD_NUM, 0) .where(PIPELINE_ID.eq(pipelineId).and(PROJECT_ID.eq(projectId))).execute() } diff --git a/src/backend/ci/core/process/biz-base/src/main/kotlin/com/tencent/devops/process/engine/service/PipelineBuildDetailService.kt b/src/backend/ci/core/process/biz-base/src/main/kotlin/com/tencent/devops/process/engine/service/PipelineBuildDetailService.kt index 473594ef282..5f511302b5f 100644 --- a/src/backend/ci/core/process/biz-base/src/main/kotlin/com/tencent/devops/process/engine/service/PipelineBuildDetailService.kt +++ b/src/backend/ci/core/process/biz-base/src/main/kotlin/com/tencent/devops/process/engine/service/PipelineBuildDetailService.kt @@ -127,9 +127,8 @@ class PipelineBuildDetailService @Autowired constructor( } val triggerContainer = model.stages[0].containers[0] as TriggerContainer - val buildNo = triggerContainer.buildNo - if (buildNo != null) { - buildNo.buildNo = buildSummaryRecord?.buildNo ?: buildNo.buildNo + triggerContainer.buildNo?.apply { + currentBuildNo = buildSummaryRecord?.buildNo ?: buildNo } val params = triggerContainer.params val newParams = ArrayList(params.size) diff --git a/src/backend/ci/core/process/biz-base/src/main/kotlin/com/tencent/devops/process/engine/service/PipelineRepositoryService.kt b/src/backend/ci/core/process/biz-base/src/main/kotlin/com/tencent/devops/process/engine/service/PipelineRepositoryService.kt index d1438d33a0d..124f566ea66 100644 --- a/src/backend/ci/core/process/biz-base/src/main/kotlin/com/tencent/devops/process/engine/service/PipelineRepositoryService.kt +++ b/src/backend/ci/core/process/biz-base/src/main/kotlin/com/tencent/devops/process/engine/service/PipelineRepositoryService.kt @@ -247,9 +247,11 @@ class PipelineRepositoryService constructor( channelCode = channelCode, yamlInfo = yamlInfo ) - - val buildNo = (model.stages[0].containers[0] as TriggerContainer).buildNo val triggerContainer = model.stages[0].containers[0] as TriggerContainer + val buildNo = triggerContainer.buildNo?.apply { + // #10958 每次存储model都需要忽略当前的推荐版本号值,在返回前端时重查 + currentBuildNo = null + } var canManualStartup = false var canElementSkip = false run lit@{ diff --git a/src/backend/ci/core/process/biz-base/src/main/kotlin/com/tencent/devops/process/engine/service/record/PipelineBuildRecordService.kt b/src/backend/ci/core/process/biz-base/src/main/kotlin/com/tencent/devops/process/engine/service/record/PipelineBuildRecordService.kt index 747dbc034eb..ed34da8fed1 100644 --- a/src/backend/ci/core/process/biz-base/src/main/kotlin/com/tencent/devops/process/engine/service/record/PipelineBuildRecordService.kt +++ b/src/backend/ci/core/process/biz-base/src/main/kotlin/com/tencent/devops/process/engine/service/record/PipelineBuildRecordService.kt @@ -232,12 +232,12 @@ class PipelineBuildRecordService @Autowired constructor( } watcher.start("fixModel") val triggerContainer = model.stages[0].containers[0] as TriggerContainer - triggerContainer.buildNo?.let { - it.buildNo = if (buildInfo.debug) { + triggerContainer.buildNo?.apply { + currentBuildNo = if (buildInfo.debug) { buildSummaryRecord?.debugBuildNo } else { buildSummaryRecord?.buildNo - } ?: it.buildNo + } ?: buildNo } val params = triggerContainer.params val newParams = ArrayList(params.size) diff --git a/src/backend/ci/core/process/biz-process/src/main/kotlin/com/tencent/devops/process/api/UserPipelineVersionResourceImpl.kt b/src/backend/ci/core/process/biz-process/src/main/kotlin/com/tencent/devops/process/api/UserPipelineVersionResourceImpl.kt index da28ce80ca8..8941a67fc84 100644 --- a/src/backend/ci/core/process/biz-process/src/main/kotlin/com/tencent/devops/process/api/UserPipelineVersionResourceImpl.kt +++ b/src/backend/ci/core/process/biz-process/src/main/kotlin/com/tencent/devops/process/api/UserPipelineVersionResourceImpl.kt @@ -37,6 +37,7 @@ import com.tencent.devops.common.auth.api.AuthResourceType import com.tencent.devops.common.pipeline.PipelineVersionWithModel import com.tencent.devops.common.pipeline.PipelineVersionWithModelRequest import com.tencent.devops.common.pipeline.enums.PipelineStorageType +import com.tencent.devops.common.pipeline.pojo.BuildNoUpdateReq import com.tencent.devops.common.pipeline.pojo.TemplateInstanceCreateRequest import com.tencent.devops.common.pipeline.pojo.transfer.PreviewResponse import com.tencent.devops.common.web.RestResource @@ -486,6 +487,21 @@ class UserPipelineVersionResourceImpl @Autowired constructor( ) } + override fun updateBuildNo( + userId: String, + projectId: String, + pipelineId: String, + buildNo: BuildNoUpdateReq + ): Result { + pipelineInfoFacadeService.updateBuildNo( + userId = userId, + projectId = projectId, + pipelineId = pipelineId, + buildNo = buildNo + ) + return Result(true) + } + private fun checkParam(userId: String, projectId: String) { if (userId.isBlank()) { throw ParamBlankException("Invalid userId") diff --git a/src/backend/ci/core/process/biz-process/src/main/kotlin/com/tencent/devops/process/engine/listener/pipeline/MQPipelineUpdateListener.kt b/src/backend/ci/core/process/biz-process/src/main/kotlin/com/tencent/devops/process/engine/listener/pipeline/MQPipelineUpdateListener.kt index 167cf1cf2bb..90f267c8749 100644 --- a/src/backend/ci/core/process/biz-process/src/main/kotlin/com/tencent/devops/process/engine/listener/pipeline/MQPipelineUpdateListener.kt +++ b/src/backend/ci/core/process/biz-process/src/main/kotlin/com/tencent/devops/process/engine/listener/pipeline/MQPipelineUpdateListener.kt @@ -60,11 +60,11 @@ class MQPipelineUpdateListener @Autowired constructor( override fun run(event: PipelineUpdateEvent) { val watcher = Watcher(id = "${event.traceId}|UpdatePipeline#${event.pipelineId}|${event.userId}") - if (event.buildNo != null) { + event.buildNo?.apply { watcher.safeAround("updateBuildNo") { pipelineRuntimeService.updateBuildNo( projectId = event.projectId, pipelineId = event.pipelineId, - buildNo = event.buildNo!!.buildNo, debug = false + buildNo = currentBuildNo ?: buildNo, debug = false ) } } diff --git a/src/backend/ci/core/process/biz-process/src/main/kotlin/com/tencent/devops/process/service/PipelineInfoFacadeService.kt b/src/backend/ci/core/process/biz-process/src/main/kotlin/com/tencent/devops/process/service/PipelineInfoFacadeService.kt index aec7794641d..63a057de37c 100644 --- a/src/backend/ci/core/process/biz-process/src/main/kotlin/com/tencent/devops/process/service/PipelineInfoFacadeService.kt +++ b/src/backend/ci/core/process/biz-process/src/main/kotlin/com/tencent/devops/process/service/PipelineInfoFacadeService.kt @@ -63,6 +63,7 @@ import com.tencent.devops.common.pipeline.enums.VersionStatus import com.tencent.devops.common.pipeline.extend.ModelCheckPlugin import com.tencent.devops.common.pipeline.pojo.BuildFormProperty import com.tencent.devops.common.pipeline.pojo.BuildNo +import com.tencent.devops.common.pipeline.pojo.BuildNoUpdateReq import com.tencent.devops.common.pipeline.pojo.PipelineModelAndSetting import com.tencent.devops.common.pipeline.pojo.element.atom.BeforeDeleteParam import com.tencent.devops.common.pipeline.pojo.setting.PipelineSetting @@ -78,6 +79,7 @@ import com.tencent.devops.process.constant.ProcessMessageCode.ERROR_NO_PERMISSIO import com.tencent.devops.process.constant.ProcessMessageCode.ILLEGAL_PIPELINE_MODEL_JSON import com.tencent.devops.process.constant.ProcessMessageCode.USER_NEED_PIPELINE_X_PERMISSION import com.tencent.devops.process.engine.compatibility.BuildPropertyCompatibilityTools +import com.tencent.devops.process.engine.dao.PipelineBuildSummaryDao import com.tencent.devops.process.engine.dao.PipelineInfoDao import com.tencent.devops.process.engine.dao.template.TemplateDao import com.tencent.devops.process.engine.pojo.PipelineInfo @@ -135,6 +137,7 @@ class PipelineInfoFacadeService @Autowired constructor( private val processJmxApi: ProcessJmxApi, private val client: Client, private val pipelineInfoDao: PipelineInfoDao, + private val pipelineBuildSummaryDao: PipelineBuildSummaryDao, private val transferService: PipelineTransferYamlService, private val yamlFacadeService: PipelineYamlFacadeService, private val operationLogService: PipelineOperationLogService, @@ -1188,6 +1191,30 @@ class PipelineInfoFacadeService @Autowired constructor( return result } + fun updateBuildNo( + userId: String, + projectId: String, + pipelineId: String, + buildNo: BuildNoUpdateReq + ) { + operationLogService.addOperationLog( + userId = userId, + projectId = projectId, + pipelineId = pipelineId, + version = 0, + operationLogType = OperationLogType.RESET_RECOMMENDED_VERSION_BUILD_NO, + params = buildNo.currentBuildNo.toString(), + description = null + ) + pipelineBuildSummaryDao.updateBuildNo( + dslContext = dslContext, + projectId = projectId, + pipelineId = pipelineId, + buildNo = buildNo.currentBuildNo, + debug = false + ) + } + fun saveAll( userId: String, projectId: String, @@ -1304,10 +1331,10 @@ class PipelineInfoFacadeService @Autowired constructor( ): Model { try { val triggerContainer = model.stages[0].containers[0] as TriggerContainer - val buildNo = triggerContainer.buildNo - if (buildNo != null) { - buildNo.buildNo = pipelineRepositoryService.getBuildNo(projectId = projectId, pipelineId = pipelineId) - ?: buildNo.buildNo + // #10958 每次存储model都需要忽略当前的推荐版本号值,在返回前端时重查 + triggerContainer.buildNo?.apply { + currentBuildNo = pipelineRepositoryService.getBuildNo(projectId = projectId, pipelineId = pipelineId) + ?: buildNo } // 兼容性处理 BuildPropertyCompatibilityTools.fix(triggerContainer.params) diff --git a/src/backend/ci/core/process/biz-process/src/main/kotlin/com/tencent/devops/process/service/PipelineVersionFacadeService.kt b/src/backend/ci/core/process/biz-process/src/main/kotlin/com/tencent/devops/process/service/PipelineVersionFacadeService.kt index 801f2aa9539..293a60ddb03 100644 --- a/src/backend/ci/core/process/biz-process/src/main/kotlin/com/tencent/devops/process/service/PipelineVersionFacadeService.kt +++ b/src/backend/ci/core/process/biz-process/src/main/kotlin/com/tencent/devops/process/service/PipelineVersionFacadeService.kt @@ -471,7 +471,10 @@ class PipelineVersionFacadeService @Autowired constructor( ) } } - pipelineBuildSummaryDao.resetDebugInfo(dslContext, projectId, pipelineId) + // 查询编排中的基准值,并把调试的版本号刷为基准值 + val debugBuildNo = (draftVersion.model.stages[0].containers[0] as TriggerContainer) + .buildNo?.buildNo ?: 0 + pipelineBuildSummaryDao.resetDebugInfo(dslContext, projectId, pipelineId, debugBuildNo) pipelineBuildDao.clearDebugHistory(dslContext, projectId, pipelineId) var targetUrl: String? = null diff --git a/src/backend/ci/core/process/biz-process/src/main/kotlin/com/tencent/devops/process/service/builds/PipelineBuildFacadeService.kt b/src/backend/ci/core/process/biz-process/src/main/kotlin/com/tencent/devops/process/service/builds/PipelineBuildFacadeService.kt index 688205ba732..0d834efc14d 100644 --- a/src/backend/ci/core/process/biz-process/src/main/kotlin/com/tencent/devops/process/service/builds/PipelineBuildFacadeService.kt +++ b/src/backend/ci/core/process/biz-process/src/main/kotlin/com/tencent/devops/process/service/builds/PipelineBuildFacadeService.kt @@ -308,12 +308,11 @@ class PipelineBuildFacadeService( BuildPropertyCompatibilityTools.fix(params) - val currentBuildNo = triggerContainer.buildNo - if (currentBuildNo != null) { - currentBuildNo.buildNo = pipelineRepositoryService.getBuildNo( + val currentBuildNo = triggerContainer.buildNo?.apply { + currentBuildNo = pipelineRepositoryService.getBuildNo( projectId = projectId, pipelineId = pipelineId - ) ?: currentBuildNo.buildNo + ) ?: buildNo } return BuildManualStartupInfo( @@ -664,7 +663,7 @@ class PipelineBuildFacadeService( if (buildNo != null) { pipelineRuntimeService.updateBuildNo( - projectId, pipelineId, buildNo, version != null + projectId, pipelineId, buildNo, debug ) logger.info("[$pipelineId] buildNo was changed to [$buildNo]") } diff --git a/src/backend/ci/core/process/biz-process/src/main/kotlin/com/tencent/devops/process/service/template/TemplateFacadeService.kt b/src/backend/ci/core/process/biz-process/src/main/kotlin/com/tencent/devops/process/service/template/TemplateFacadeService.kt index c988022a0ff..ab7f31042c9 100644 --- a/src/backend/ci/core/process/biz-process/src/main/kotlin/com/tencent/devops/process/service/template/TemplateFacadeService.kt +++ b/src/backend/ci/core/process/biz-process/src/main/kotlin/com/tencent/devops/process/service/template/TemplateFacadeService.kt @@ -1501,14 +1501,12 @@ class TemplateFacadeService @Autowired constructor( ) logger.info("[$userId|$projectId|$templateId|$version] Get the param ($instanceParams)") - val buildNo = templateTriggerContainer.buildNo - var instanceBuildNoObj: BuildNo? = null // 模板中的buildNo存在才需要回显 - if (buildNo != null) { - instanceBuildNoObj = BuildNo( - buildNoType = buildNo.buildNoType, - required = buildNo.required ?: instanceTriggerContainer.buildNo?.required, - buildNo = buildNos[pipelineId] ?: buildNo.buildNo + val instanceBuildNoObj = templateTriggerContainer.buildNo?.let { no -> + BuildNo( + buildNoType = no.buildNoType, + required = no.required ?: instanceTriggerContainer.buildNo?.required, + buildNo = buildNos[pipelineId] ?: no.buildNo ) } diff --git a/support-files/i18n/process/message_en_US.properties b/support-files/i18n/process/message_en_US.properties index 49f3c01cf90..2dce4c328bd 100644 --- a/support-files/i18n/process/message_en_US.properties +++ b/support-files/i18n/process/message_en_US.properties @@ -504,6 +504,7 @@ operationLogType.ADD_PIPELINE_OWNER=Add pipeline executors operationLogType.ADD_PIPELINE_TO_GROUP=Add to pipeline group operationLogType.MOVE_PIPELINE_OUT_OF_GROUP=Move out of pipeline group operationLogType.UPDATE_PIPELINE_BY_OPENAPI=Modify setting and add new version +operationLogType.RESET_RECOMMENDED_VERSION_BUILD_NO=Reset recommended version to trigger.build.param.basic=Basic parameters of pipeline trigger.build.param.codeGitWebHookTrigger.ci.repo_type.desc=Repository type @@ -780,4 +781,4 @@ bkPipelineRunConditionResult=The calculation result of custom condition [{0}] is bkPipelineRunConditionNotMatch=, which is not met and will be skipped. bkPipelineRunConditionWithError=The calculation of custom condition has error: {0} transferErrorCheckAgentIdFailed=The current private build machine data is incorrect or does not exist -transferErrorCheckEnvIdFailed=The current private build machine cluster data is incorrect or does not exist \ No newline at end of file +transferErrorCheckEnvIdFailed=The current private build machine cluster data is incorrect or does not exist diff --git a/support-files/i18n/process/message_zh_CN.properties b/support-files/i18n/process/message_zh_CN.properties index 2acaf0e63ac..d09db28e49c 100644 --- a/support-files/i18n/process/message_zh_CN.properties +++ b/support-files/i18n/process/message_zh_CN.properties @@ -504,6 +504,7 @@ operationLogType.ADD_PIPELINE_OWNER=添加执行者 operationLogType.ADD_PIPELINE_TO_GROUP=添加到流水线组 operationLogType.MOVE_PIPELINE_OUT_OF_GROUP=移出流水线组 operationLogType.UPDATE_PIPELINE_BY_OPENAPI=修改配置新增版本 +operationLogType.RESET_RECOMMENDED_VERSION_BUILD_NO=重置推荐版本号为 trigger.build.param.basic=流水线内置变量 trigger.build.param.codeGitWebHookTrigger.ci.repo_type.desc=触发的代码库类型