Skip to content

Commit

Permalink
Merge branch 'feat_8122' of https://github.com/mingshewhe/bk-ci into …
Browse files Browse the repository at this point in the history
…mht_feat_8122
  • Loading branch information
hejieehe committed Nov 20, 2023
2 parents 82500a9 + ffb7dd1 commit 9cc74cd
Show file tree
Hide file tree
Showing 21 changed files with 653 additions and 735 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ package com.tencent.devops.common.pipeline.utils

import com.tencent.devops.common.api.enums.RepositoryConfig
import com.tencent.devops.common.api.enums.RepositoryType
import com.tencent.devops.common.api.enums.ScmType
import com.tencent.devops.common.api.exception.InvalidParamException
import com.tencent.devops.common.api.util.EnvUtils
import com.tencent.devops.common.pipeline.pojo.element.Element
Expand All @@ -42,6 +43,7 @@ import com.tencent.devops.common.pipeline.pojo.element.trigger.CodeGitlabWebHook
import com.tencent.devops.common.pipeline.pojo.element.trigger.CodeP4WebHookTriggerElement
import com.tencent.devops.common.pipeline.pojo.element.trigger.CodeSVNWebHookTriggerElement
import com.tencent.devops.common.pipeline.pojo.element.trigger.CodeTGitWebHookTriggerElement
import com.tencent.devops.common.pipeline.pojo.element.trigger.enums.CodeEventType

object RepositoryConfigUtils {

Expand Down Expand Up @@ -133,30 +135,94 @@ object RepositoryConfigUtils {
)
}

fun buildWebhookConfig(
element: Element,
variables: Map<String, String>
): Triple<ScmType, CodeEventType?, RepositoryConfig> {
return when (element) {
is CodeGitWebHookTriggerElement -> {
val repositoryConfig = RepositoryConfig(
repositoryHashId = element.repositoryHashId,
repositoryName = EnvUtils.parseEnv(element.repositoryName, variables),
repositoryType = element.repositoryType ?: RepositoryType.ID
)
Triple(ScmType.CODE_GIT, element.eventType, repositoryConfig)
}

is CodeSVNWebHookTriggerElement -> {
val repositoryConfig = RepositoryConfig(
repositoryHashId = element.repositoryHashId,
repositoryName = EnvUtils.parseEnv(element.repositoryName, variables),
repositoryType = element.repositoryType ?: RepositoryType.ID
)
Triple(ScmType.CODE_SVN, CodeEventType.PUSH_COMMIT, repositoryConfig)
}

is CodeGitlabWebHookTriggerElement -> {
val repositoryConfig = RepositoryConfig(
repositoryHashId = element.repositoryHashId,
repositoryName = EnvUtils.parseEnv(element.repositoryName, variables),
repositoryType = element.repositoryType ?: RepositoryType.ID
)
Triple(ScmType.CODE_GITLAB, element.eventType, repositoryConfig)
}

is CodeGithubWebHookTriggerElement -> {
val repositoryConfig = RepositoryConfig(
repositoryHashId = element.repositoryHashId,
repositoryName = EnvUtils.parseEnv(element.repositoryName, variables),
repositoryType = element.repositoryType ?: RepositoryType.ID
)
Triple(ScmType.GITHUB, element.eventType, repositoryConfig)
}

is CodeTGitWebHookTriggerElement -> {
val repositoryConfig = RepositoryConfig(
repositoryHashId = element.data.input.repositoryHashId,
repositoryName = EnvUtils.parseEnv(element.data.input.repositoryName, variables),
repositoryType = element.data.input.repositoryType ?: RepositoryType.ID
)
Triple(ScmType.CODE_TGIT, element.data.input.eventType, repositoryConfig)
}

is CodeP4WebHookTriggerElement -> {
val repositoryConfig = RepositoryConfig(
repositoryHashId = element.data.input.repositoryHashId,
repositoryName = EnvUtils.parseEnv(element.data.input.repositoryName, variables),
repositoryType = element.data.input.repositoryType ?: RepositoryType.ID
)
Triple(ScmType.CODE_P4, element.data.input.eventType, repositoryConfig)
}

else ->
throw InvalidParamException("Unknown code element -> $element")
}
}

fun getRepositoryConfig(
repoHashId: String?,
repoName: String?,
repoType: RepositoryType?,
variable: Map<String, String>? = null
variables: Map<String, String>? = null
): RepositoryConfig {
return when (repoType) {
RepositoryType.ID -> RepositoryConfig(repoHashId, null, RepositoryType.ID)
RepositoryType.NAME -> {
val repositoryName = if (variable.isNullOrEmpty()) {
val repositoryName = if (variables.isNullOrEmpty()) {
repoName!!
} else {
EnvUtils.parseEnv(repoName!!, variable)
EnvUtils.parseEnv(repoName!!, variables)
}
RepositoryConfig(null, repositoryName, RepositoryType.NAME)
}
else -> {
if (!repoHashId.isNullOrBlank()) {
RepositoryConfig(repoHashId, null, RepositoryType.ID)
} else if (!repoName.isNullOrBlank()) {
val repositoryName = if (variable.isNullOrEmpty()) {
val repositoryName = if (variables.isNullOrEmpty()) {
repoName
} else {
EnvUtils.parseEnv(repoName, variable)
EnvUtils.parseEnv(repoName, variables)
}
RepositoryConfig(null, repositoryName, RepositoryType.NAME)
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,17 +47,7 @@ class ContainsFilter(

override fun doFilter(response: WebhookFilterResponse): Boolean {
logger.info("$pipelineId|triggerOn:$triggerOn|included:$included|$filterName filter")

return buildFilterFailedReason(
action = {
included.isEmpty() || included.contains(triggerOn)
},
response = response
)
}

private fun buildFilterFailedReason(action: () -> Boolean, response: WebhookFilterResponse): Boolean {
val filterResult = action.invoke()
val filterResult = included.isEmpty() || included.contains(triggerOn)
if (!filterResult && failedReason.isNotBlank()) {
response.failedReason = failedReason
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,12 +49,11 @@ class RegexContainFilter(

override fun doFilter(response: WebhookFilterResponse): Boolean {
logger.info("$pipelineId|triggerOn:$triggerOn|included:$included|$filterName filter")
return buildFilterFailedReason(
action = {
filterAction()
},
response = response
)
val filterResult = filterAction()
if (!filterResult && failedReason.isNotBlank()) {
response.failedReason = failedReason
}
return filterResult
}

@SuppressWarnings("ReturnCount")
Expand All @@ -73,12 +72,4 @@ class RegexContainFilter(
}
return false
}

private fun buildFilterFailedReason(action: () -> Boolean, response: WebhookFilterResponse): Boolean {
val filterResult = action.invoke()
if (!filterResult && failedReason.isNotBlank()) {
response.failedReason = failedReason
}
return filterResult
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,11 @@ import javax.ws.rs.core.MediaType
@Consumes(MediaType.APPLICATION_JSON)
interface OpScmWebhookResource {

@ApiOperation("更新所有的webhook项目名")
@PUT
@Path("/updateProjectNameAndTaskId")
fun updateProjectNameAndTaskId(): Result<Boolean>

@ApiOperation("更新webhook secret")
@PUT
@Path("/updateWebhookSecret")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ import io.swagger.annotations.ApiParam
import javax.ws.rs.Consumes
import javax.ws.rs.GET
import javax.ws.rs.HeaderParam
import javax.ws.rs.PUT
import javax.ws.rs.Path
import javax.ws.rs.PathParam
import javax.ws.rs.Produces
Expand All @@ -49,12 +48,6 @@ import javax.ws.rs.core.MediaType
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
interface UserScmWebhookResource {

@ApiOperation("更新所有的webhook项目名")
@PUT
@Path("/updateProjectNameAndTaskId")
fun updateProjectNameAndTaskId(): Result<Boolean>

@ApiOperation("根据代码库类型获取事件")
@GET
@Path("/eventType")
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -294,7 +294,7 @@ class PipelineWebhookDao {
dslContext: DSLContext,
repositoryHashId: String?,
eventType: String,
externalId: String,
externalId: String?,
pipelineId: String,
projectId: String,
taskId: String
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,6 @@ import com.tencent.devops.process.service.builds.PipelineBuildFacadeService
import com.tencent.devops.process.service.builds.PipelineBuildMaintainFacadeService
import com.tencent.devops.process.service.builds.PipelinePauseBuildFacadeService
import io.micrometer.core.annotation.Timed
import org.slf4j.LoggerFactory
import org.springframework.beans.factory.annotation.Autowired
import javax.ws.rs.core.Response

Expand Down Expand Up @@ -536,8 +535,4 @@ class UserBuildResourceImpl @Autowired constructor(
throw ParamBlankException("Invalid projectId")
}
}

companion object {
private val logger = LoggerFactory.getLogger(UserBuildResourceImpl::class.java)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,12 +41,6 @@ import org.springframework.beans.factory.annotation.Autowired
class UserScmWebhookResourceImpl @Autowired constructor(
private val pipelineWebhookService: PipelineWebhookService
) : UserScmWebhookResource {

override fun updateProjectNameAndTaskId(): Result<Boolean> {
pipelineWebhookService.updateProjectNameAndTaskId()
return Result(true)
}

override fun getEventType(scmType: String): Result<List<WebhookEventType>> {
val eventTypeList = when (scmType) {
ScmType.CODE_GIT.name, ScmType.CODE_TGIT.name ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ package com.tencent.devops.process.api.external
import com.tencent.devops.common.api.exception.InvalidParamException
import com.tencent.devops.common.api.exception.ParamBlankException
import com.tencent.devops.common.api.pojo.Result
import com.tencent.devops.common.service.trace.TraceTag
import com.tencent.devops.common.web.RestResource
import com.tencent.devops.process.webhook.CodeWebhookEventDispatcher
import com.tencent.devops.process.webhook.pojo.event.commit.GitWebhookEvent
Expand All @@ -39,7 +38,6 @@ import com.tencent.devops.process.webhook.pojo.event.commit.P4WebhookEvent
import com.tencent.devops.process.webhook.pojo.event.commit.SvnWebhookEvent
import com.tencent.devops.process.webhook.pojo.event.commit.TGitWebhookEvent
import org.slf4j.LoggerFactory
import org.slf4j.MDC
import org.springframework.amqp.rabbit.core.RabbitTemplate
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.beans.factory.annotation.Value
Expand All @@ -62,19 +60,16 @@ class ExternalScmResourceImpl @Autowired constructor(
secret: String?,
traceId: String,
body: String
): Result<Boolean> {
logger.info("traceId: ${MDC.get(TraceTag.BIZID)}")
return Result(
CodeWebhookEventDispatcher.dispatchEvent(
rabbitTemplate = rabbitTemplate,
event = GitWebhookEvent(
requestContent = body,
event = event,
secret = secret
)
): Result<Boolean> = Result(
CodeWebhookEventDispatcher.dispatchEvent(
rabbitTemplate = rabbitTemplate,
event = GitWebhookEvent(
requestContent = body,
event = event,
secret = secret
)
)
}
)

override fun webHookGitlabCommit(event: String) =
Result(CodeWebhookEventDispatcher.dispatchEvent(rabbitTemplate, GitlabWebhookEvent(requestContent = event)))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,25 @@ package com.tencent.devops.process.api.op
import com.tencent.devops.common.api.enums.ScmType
import com.tencent.devops.common.api.pojo.Result
import com.tencent.devops.common.web.RestResource
import com.tencent.devops.process.engine.service.PipelineWebhookService
import com.tencent.devops.process.engine.service.PipelineWebhookUpgradeService

@RestResource
class OpScmWebhookResourceImpl(
private val pipelineWebhookService: PipelineWebhookService
private val pipelineWebhookUpgradeService: PipelineWebhookUpgradeService
) : OpScmWebhookResource {

override fun updateProjectNameAndTaskId(): Result<Boolean> {
pipelineWebhookUpgradeService.updateProjectNameAndTaskId()
return Result(true)
}

override fun updateWebhookSecret(scmType: String): Result<Boolean> {
pipelineWebhookService.updateWebhookSecret(ScmType.valueOf(scmType))
pipelineWebhookUpgradeService.updateWebhookSecret(ScmType.valueOf(scmType))
return Result(true)
}

override fun updateWebhookEventInfo(): Result<Boolean> {
pipelineWebhookService.updateWebhookEventInfo()
pipelineWebhookUpgradeService.updateWebhookEventInfo()
return Result(true)
}
}
Loading

0 comments on commit 9cc74cd

Please sign in to comment.