From 1ef4fbe709cce3fc3e2ddd6c21ed89f83d49eeed Mon Sep 17 00:00:00 2001 From: charis <252054576@qq.com> Date: Sat, 7 Sep 2024 12:35:04 +0800 Subject: [PATCH 1/4] =?UTF-8?q?fix:=20=201.=E6=B3=A8=E8=A7=A3=E7=9A=84?= =?UTF-8?q?=E5=B5=8C=E5=A5=97=E8=B0=83=E7=94=A8=E6=97=B6=EF=BC=8C=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0=E7=9A=84=E9=99=84=E5=8A=A0=E6=97=A5=E5=BF=97=E4=BC=9A?= =?UTF-8?q?=E4=B8=80=E7=9B=B4=E7=B4=AF=E5=8A=A0=EF=BC=9B=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=202.=E5=90=8C=E6=97=B6=E4=BD=BF=E7=94=A8web=20filter?= =?UTF-8?q?=E5=92=8Cspring=20interceptor=E6=97=B6=EF=BC=8Cinterceptor?= =?UTF-8?q?=E6=89=A7=E8=A1=8C=E5=AE=8C=E6=88=90=E5=90=8E=E4=BC=9A=E6=B8=85?= =?UTF-8?q?=E7=A9=BA=E6=97=A5=E5=BF=97=EF=BC=8C=E9=80=A0=E6=88=90traceId?= =?UTF-8?q?=E4=B8=A2=E5=A4=B1=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yomahub/tlog/constant/TLogConstants.java | 2 + .../yomahub/tlog/core/aop/AspectLogAop.java | 139 ++++++++++-------- .../tlog/core/utils/TLogAspectUtils.java | 48 ++++++ .../tlog/web/common/TLogWebCommon.java | 2 + .../tlog/web/filter/TLogServletFilter.java | 2 +- .../web/interceptor/TLogWebInterceptor.java | 16 +- 6 files changed, 144 insertions(+), 65 deletions(-) create mode 100644 tlog-core/src/main/java/com/yomahub/tlog/core/utils/TLogAspectUtils.java diff --git a/tlog-common/src/main/java/com/yomahub/tlog/constant/TLogConstants.java b/tlog-common/src/main/java/com/yomahub/tlog/constant/TLogConstants.java index a391648..2db5966 100644 --- a/tlog-common/src/main/java/com/yomahub/tlog/constant/TLogConstants.java +++ b/tlog-common/src/main/java/com/yomahub/tlog/constant/TLogConstants.java @@ -26,4 +26,6 @@ public class TLogConstants { public static final String WEBFLUX_EXCHANGE = "exchange"; + public static final String REQUEST_ATTRIBUTE_TLOG_FLAG = "REQUEST_ATTRIBUTE_TLOG_FLAG"; + } diff --git a/tlog-core/src/main/java/com/yomahub/tlog/core/aop/AspectLogAop.java b/tlog-core/src/main/java/com/yomahub/tlog/core/aop/AspectLogAop.java index 98d4942..bb95b41 100644 --- a/tlog-core/src/main/java/com/yomahub/tlog/core/aop/AspectLogAop.java +++ b/tlog-core/src/main/java/com/yomahub/tlog/core/aop/AspectLogAop.java @@ -11,6 +11,7 @@ import com.yomahub.tlog.constant.TLogConstants; import com.yomahub.tlog.core.annotation.TLogAspect; import com.yomahub.tlog.core.context.AspectLogContext; import com.yomahub.tlog.core.convert.AspectLogConvert; +import com.yomahub.tlog.core.utils.TLogAspectUtils; import com.yomahub.tlog.exception.TLogCustomLabelExpressionException; import org.apache.commons.lang3.StringUtils; import org.aspectj.lang.ProceedingJoinPoint; @@ -21,6 +22,7 @@ import org.aspectj.lang.reflect.MethodSignature; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.MDC; + import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; @@ -45,93 +47,110 @@ public class AspectLogAop { @Around("cut()") public Object around(ProceedingJoinPoint jp) throws Throwable { - Object[] args = jp.getArgs(); - MethodSignature signature = (MethodSignature) jp.getSignature(); - Method method = signature.getMethod(); - String[] parameterNames = signature.getParameterNames(); - Map paramNameValueMap = MapUtil.newHashMap(); - for (int i = 0; i < parameterNames.length; i++) { - paramNameValueMap.put(parameterNames[i], args[i]); - } + //拿到之前的标签 + String oldLogValue = AspectLogContext.getLogValue(); + boolean fillSuccessful = false; + try { + Object[] args = jp.getArgs(); + MethodSignature signature = (MethodSignature) jp.getSignature(); + Method method = signature.getMethod(); + String[] parameterNames = signature.getParameterNames(); + Map paramNameValueMap = MapUtil.newHashMap(); + for (int i = 0; i < parameterNames.length; i++) { + paramNameValueMap.put(parameterNames[i], args[i]); + } - TLogAspect tlogAspect = method.getAnnotation(TLogAspect.class); - String[] aspectExpressions = tlogAspect.value(); - String str = tlogAspect.str(); - String pattern = tlogAspect.pattern(); - String joint = tlogAspect.joint(); - Class convertClazz = tlogAspect.convert(); + TLogAspect tlogAspect = method.getAnnotation(TLogAspect.class); + TLogAspectUtils.push(tlogAspect); - StringBuilder sb = new StringBuilder(); + String[] aspectExpressions = tlogAspect.value(); + String str = tlogAspect.str(); + String pattern = tlogAspect.pattern(); + String joint = tlogAspect.joint(); + Class convertClazz = tlogAspect.convert(); - //处理字符串类型标签 - if (StrUtil.isNotBlank(str)){ - sb.append(str); - sb.append(joint); - } + StringBuilder sb = new StringBuilder(); - //处理自定义converter - boolean isAspectLogConvert; - if (convertClazz.equals(AspectLogConvert.class)){ - isAspectLogConvert = false; - }else{ - isAspectLogConvert = AspectLogConvert.class.isAssignableFrom(convertClazz); - } - - if (isAspectLogConvert) { - AspectLogConvert convert = convertClazz.newInstance(); - try { - sb.append(convert.convert(args)); + //处理字符串类型标签 + if (StrUtil.isNotBlank(str)) { + sb.append(str); sb.append(joint); - } catch (Throwable t) { - log.error("[AspectLog]some errors happens in AspectLog's convert", t); } - } - //处理表达式 - for (String aspectExpression : aspectExpressions) { - String aspLogValueItem = getExpressionValue(aspectExpression, paramNameValueMap); - if (StringUtils.isNotBlank(aspLogValueItem)) { - sb.append(StrUtil.format("{}:{}", aspectExpression, aspLogValueItem)); - sb.append(joint); + //处理自定义converter + boolean isAspectLogConvert; + if (convertClazz.equals(AspectLogConvert.class)) { + isAspectLogConvert = false; + } else { + isAspectLogConvert = AspectLogConvert.class.isAssignableFrom(convertClazz); } - } - String aspLogValue = sb.toString(); - if (StringUtils.isNotBlank(aspLogValue)) { - aspLogValue = aspLogValue.substring(0, aspLogValue.length() - joint.length()); - aspLogValue = StrUtil.format(pattern, aspLogValue); + if (isAspectLogConvert) { + AspectLogConvert convert = convertClazz.newInstance(); + try { + sb.append(convert.convert(args)); + sb.append(joint); + } catch (Throwable t) { + log.error("[AspectLog]some errors happens in AspectLog's convert", t); + } + } + + //处理表达式 + for (String aspectExpression : aspectExpressions) { + String aspLogValueItem = getExpressionValue(aspectExpression, paramNameValueMap); + if (StringUtils.isNotBlank(aspLogValueItem)) { + sb.append(StrUtil.format("{}:{}", aspectExpression, aspLogValueItem)); + sb.append(joint); + } + } - //拿到之前的标签 - String currentLabel = AspectLogContext.getLogValue(); + String aspLogValue = sb.toString(); + if (StringUtils.isNotBlank(aspLogValue)) { + fillSuccessful = true; - MDC.put(TLogConstants.MDC_KEY, currentLabel + " " + aspLogValue); - AspectLogContext.putLogValue(currentLabel + " " + aspLogValue); - } + aspLogValue = aspLogValue.substring(0, aspLogValue.length() - joint.length()); + aspLogValue = StrUtil.format(pattern, aspLogValue); - return jp.proceed(); + MDC.put(TLogConstants.MDC_KEY, oldLogValue + " " + aspLogValue); + AspectLogContext.putLogValue(oldLogValue + " " + aspLogValue); + } + + return jp.proceed(); + } finally { + // 弹出当前的注解 + TLogAspectUtils.pop(); + // 如果填充成功 + if (fillSuccessful) { + // 将旧值设置回去,解决嵌套调用的问题 + if (StrUtil.isNotBlank(oldLogValue)) { + MDC.put(TLogConstants.MDC_KEY, oldLogValue); + AspectLogContext.putLogValue(oldLogValue); + } + } + } } - private String getExpressionValue(String expression, Map map){ + private String getExpressionValue(String expression, Map map) { List errorList = new ArrayList<>(); - try{ + try { InstructionSet instructionSet = expressRunner.getInstructionSetFromLocalCache("map." + expression); DefaultContext context = new DefaultContext<>(); context.put("map", map); Object value = expressRunner.execute(instructionSet, context, errorList, false, false); - if (ObjectUtil.isNull(value)){ + if (ObjectUtil.isNull(value)) { return null; } - if (ObjectUtil.isBasicType(value)){ + if (ObjectUtil.isBasicType(value)) { return value.toString(); - }else{ + } else { return JSON.toJSONString(value); } - }catch (Throwable t){ - for (String scriptErrorMsg : errorList){ + } catch (Throwable t) { + for (String scriptErrorMsg : errorList) { log.error("\n{}", scriptErrorMsg); } - log.error(t.getMessage(),t); + log.error(t.getMessage(), t); throw new TLogCustomLabelExpressionException(t.getMessage()); } } diff --git a/tlog-core/src/main/java/com/yomahub/tlog/core/utils/TLogAspectUtils.java b/tlog-core/src/main/java/com/yomahub/tlog/core/utils/TLogAspectUtils.java new file mode 100644 index 0000000..c412305 --- /dev/null +++ b/tlog-core/src/main/java/com/yomahub/tlog/core/utils/TLogAspectUtils.java @@ -0,0 +1,48 @@ +package com.yomahub.tlog.core.utils; + +import com.yomahub.tlog.core.annotation.TLogAspect; + +import java.util.Deque; +import java.util.LinkedList; + +/** + * 注解切面工具类 + * + * @author pengchao + * @since 2024/9/5 + */ +public class TLogAspectUtils { + + private TLogAspectUtils() { + } + + private static final ThreadLocal> TLOG_ASPECT_THREAD_LOCAL = ThreadLocal.withInitial(LinkedList::new); + + /** + * 获取当前TLogAspect + * + * @return 当前TLogAspect + */ + public static TLogAspect peek() { + return TLOG_ASPECT_THREAD_LOCAL.get().peek(); + } + + /** + * 添加TLogAspect + * + * @param tLogAspect TLogAspect + */ + public static void push(TLogAspect tLogAspect) { + TLOG_ASPECT_THREAD_LOCAL.get().push(tLogAspect); + } + + /** + * 弹出TLogAspect + */ + public static void pop() { + TLOG_ASPECT_THREAD_LOCAL.get().pop(); + if (TLOG_ASPECT_THREAD_LOCAL.get().isEmpty()) { + TLOG_ASPECT_THREAD_LOCAL.remove(); + } + } +} diff --git a/tlog-webroot/src/main/java/com/yomahub/tlog/web/common/TLogWebCommon.java b/tlog-webroot/src/main/java/com/yomahub/tlog/web/common/TLogWebCommon.java index a2a5754..5be2a3f 100644 --- a/tlog-webroot/src/main/java/com/yomahub/tlog/web/common/TLogWebCommon.java +++ b/tlog-webroot/src/main/java/com/yomahub/tlog/web/common/TLogWebCommon.java @@ -43,6 +43,8 @@ public class TLogWebCommon extends TLogRPCHandler { TLogLabelBean labelBean = new TLogLabelBean(preIvkApp, preIvkHost, preIp, traceId, spanId); processProviderSide(labelBean); + + request.setAttribute(TLogConstants.REQUEST_ATTRIBUTE_TLOG_FLAG, true); } public void afterCompletion() { diff --git a/tlog-webroot/src/main/java/com/yomahub/tlog/web/filter/TLogServletFilter.java b/tlog-webroot/src/main/java/com/yomahub/tlog/web/filter/TLogServletFilter.java index 0a39d28..2e277e9 100644 --- a/tlog-webroot/src/main/java/com/yomahub/tlog/web/filter/TLogServletFilter.java +++ b/tlog-webroot/src/main/java/com/yomahub/tlog/web/filter/TLogServletFilter.java @@ -22,7 +22,7 @@ public class TLogServletFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { - if (request instanceof HttpServletRequest && response instanceof HttpServletResponse){ + if (request instanceof HttpServletRequest && response instanceof HttpServletResponse && null == request.getAttribute(TLogConstants.REQUEST_ATTRIBUTE_TLOG_FLAG)){ try{ TLogWebCommon.loadInstance().preHandle((HttpServletRequest)request); //把traceId放入response的header,为了方便有些人有这样的需求,从前端拿整条链路的traceId diff --git a/tlog-webroot/src/main/java/com/yomahub/tlog/web/interceptor/TLogWebInterceptor.java b/tlog-webroot/src/main/java/com/yomahub/tlog/web/interceptor/TLogWebInterceptor.java index 47cf5a8..ead57da 100644 --- a/tlog-webroot/src/main/java/com/yomahub/tlog/web/interceptor/TLogWebInterceptor.java +++ b/tlog-webroot/src/main/java/com/yomahub/tlog/web/interceptor/TLogWebInterceptor.java @@ -18,12 +18,17 @@ import javax.servlet.http.HttpServletResponse; public class TLogWebInterceptor extends AbsTLogWebHandlerMethodInterceptor { private static final Logger log = LoggerFactory.getLogger(TLogWebInterceptor.class); + private static final ThreadLocal SET_FLAG = new ThreadLocal<>(); @Override public boolean preHandleByHandlerMethod(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { - TLogWebCommon.loadInstance().preHandle(request); - //把traceId放入response的header,为了方便有些人有这样的需求,从前端拿整条链路的traceId - response.addHeader(TLogConstants.TLOG_TRACE_KEY, TLogContext.getTraceId()); + if (null == request.getAttribute(TLogConstants.REQUEST_ATTRIBUTE_TLOG_FLAG)) { + SET_FLAG.set(true); + + TLogWebCommon.loadInstance().preHandle(request); + //把traceId放入response的header,为了方便有些人有这样的需求,从前端拿整条链路的traceId + response.addHeader(TLogConstants.TLOG_TRACE_KEY, TLogContext.getTraceId()); + } return true; } @@ -33,6 +38,9 @@ public class TLogWebInterceptor extends AbsTLogWebHandlerMethodInterceptor { @Override public void afterCompletionByHandlerMethod(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { - TLogWebCommon.loadInstance().afterCompletion(); + if (null != SET_FLAG.get()) { + TLogWebCommon.loadInstance().afterCompletion(); + } + SET_FLAG.remove(); } } -- Gitee From 9299fbffc74068308266471c38a485a511ab1b49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BD=AD?= <252054576@qq.com> Date: Wed, 11 Sep 2024 02:44:44 +0000 Subject: [PATCH 2/4] add default pipeline template yaml --- .workflow/branch-pipeline.yml | 53 +++++++++++++++++++++++++++++++++++ .workflow/master-pipeline.yml | 51 +++++++++++++++++++++++++++++++++ .workflow/pr-pipeline.yml | 40 ++++++++++++++++++++++++++ 3 files changed, 144 insertions(+) create mode 100644 .workflow/branch-pipeline.yml create mode 100644 .workflow/master-pipeline.yml create mode 100644 .workflow/pr-pipeline.yml diff --git a/.workflow/branch-pipeline.yml b/.workflow/branch-pipeline.yml new file mode 100644 index 0000000..9d2a292 --- /dev/null +++ b/.workflow/branch-pipeline.yml @@ -0,0 +1,53 @@ +version: '1.0' +name: branch-pipeline +displayName: BranchPipeline +stages: + - stage: + name: compile + displayName: 编译 + steps: + - step: build@maven + name: build_maven + displayName: Maven 构建 + # 支持6、7、8、9、10、11六个版本 + jdkVersion: 8 + # 支持2.2.1、3.2.5、3.3.9、3.5.2、3.5.3、3.5.4、3.6.1、3.6.3八个版本 + mavenVersion: 3.3.9 + # 构建命令 + commands: + - mvn -B clean package -Dmaven.test.skip=true + # 非必填字段,开启后表示将构建产物暂存,但不会上传到制品库中,7天后自动清除 + artifacts: + # 构建产物名字,作为产物的唯一标识可向下传递,支持自定义,默认为BUILD_ARTIFACT。在下游可以通过${BUILD_ARTIFACT}方式引用来获取构建物地址 + - name: BUILD_ARTIFACT + # 构建产物获取路径,是指代码编译完毕之后构建物的所在路径,如通常jar包在target目录下。当前目录为代码库根目录 + path: + - ./target + - step: publish@general_artifacts + name: publish_general_artifacts + displayName: 上传制品 + # 上游构建任务定义的产物名,默认BUILD_ARTIFACT + dependArtifact: BUILD_ARTIFACT + # 上传到制品库时的制品命名,默认output + artifactName: output + dependsOn: build_maven + - stage: + name: release + displayName: 发布 + steps: + - step: publish@release_artifacts + name: publish_release_artifacts + displayName: '发布' + # 上游上传制品任务的产出 + dependArtifact: output + # 发布制品版本号 + version: '1.0.0.0' + # 是否开启版本号自增,默认开启 + autoIncrement: true +triggers: + push: + branches: + exclude: + - master + include: + - .* diff --git a/.workflow/master-pipeline.yml b/.workflow/master-pipeline.yml new file mode 100644 index 0000000..5d926c2 --- /dev/null +++ b/.workflow/master-pipeline.yml @@ -0,0 +1,51 @@ +version: '1.0' +name: master-pipeline +displayName: MasterPipeline +stages: + - stage: + name: compile + displayName: 编译 + steps: + - step: build@maven + name: build_maven + displayName: Maven 构建 + # 支持6、7、8、9、10、11六个版本 + jdkVersion: 8 + # 支持2.2.1、3.2.5、3.3.9、3.5.2、3.5.3、3.5.4、3.6.1、3.6.3八个版本 + mavenVersion: 3.3.9 + # 构建命令 + commands: + - mvn -B clean package -Dmaven.test.skip=true + # 非必填字段,开启后表示将构建产物暂存,但不会上传到制品库中,7天后自动清除 + artifacts: + # 构建产物名字,作为产物的唯一标识可向下传递,支持自定义,默认为BUILD_ARTIFACT。在下游可以通过${BUILD_ARTIFACT}方式引用来获取构建物地址 + - name: BUILD_ARTIFACT + # 构建产物获取路径,是指代码编译完毕之后构建物的所在路径,如通常jar包在target目录下。当前目录为代码库根目录 + path: + - ./target + - step: publish@general_artifacts + name: publish_general_artifacts + displayName: 上传制品 + # 上游构建任务定义的产物名,默认BUILD_ARTIFACT + dependArtifact: BUILD_ARTIFACT + # 上传到制品库时的制品命名,默认output + artifactName: output + dependsOn: build_maven + - stage: + name: release + displayName: 发布 + steps: + - step: publish@release_artifacts + name: publish_release_artifacts + displayName: '发布' + # 上游上传制品任务的产出 + dependArtifact: output + # 发布制品版本号 + version: '1.0.0.0' + # 是否开启版本号自增,默认开启 + autoIncrement: true +triggers: + push: + branches: + include: + - master diff --git a/.workflow/pr-pipeline.yml b/.workflow/pr-pipeline.yml new file mode 100644 index 0000000..3f7579d --- /dev/null +++ b/.workflow/pr-pipeline.yml @@ -0,0 +1,40 @@ +version: '1.0' +name: pr-pipeline +displayName: PRPipeline +stages: + - stage: + name: compile + displayName: 编译 + steps: + - step: build@maven + name: build_maven + displayName: Maven 构建 + # 支持6、7、8、9、10、11六个版本 + jdkVersion: 8 + # 支持2.2.1、3.2.5、3.3.9、3.5.2、3.5.3、3.5.4、3.6.1、3.6.3八个版本 + mavenVersion: 3.3.9 + # 构建命令 + commands: + - mvn -B clean package -Dmaven.test.skip=true + # 非必填字段,开启后表示将构建产物暂存,但不会上传到制品库中,7天后自动清除 + artifacts: + # 构建产物名字,作为产物的唯一标识可向下传递,支持自定义,默认为BUILD_ARTIFACT。在下游可以通过${BUILD_ARTIFACT}方式引用来获取构建物地址 + - name: BUILD_ARTIFACT + # 构建产物获取路径,是指代码编译完毕之后构建物的所在路径,如通常jar包在target目录下。当前目录为代码库根目录 + path: + - ./target + - step: publish@general_artifacts + name: publish_general_artifacts + displayName: 上传制品 + # 上游构建任务定义的产物名,默认BUILD_ARTIFACT + dependArtifact: BUILD_ARTIFACT + # 构建产物制品库,默认default,系统默认创建 + artifactRepository: default + # 上传到制品库时的制品命名,默认output + artifactName: output + dependsOn: build_maven +triggers: + pr: + branches: + include: + - master -- Gitee From 69d3b10ba140a91741aef50ca2683e54035ed8d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BD=AD?= <252054576@qq.com> Date: Wed, 11 Sep 2024 02:46:16 +0000 Subject: [PATCH 3/4] update master-pipeline.yml --- .workflow/master-pipeline.yml | 46 +++++++++++++++++------------------ 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/.workflow/master-pipeline.yml b/.workflow/master-pipeline.yml index 5d926c2..b9c01c6 100644 --- a/.workflow/master-pipeline.yml +++ b/.workflow/master-pipeline.yml @@ -1,51 +1,51 @@ version: '1.0' name: master-pipeline displayName: MasterPipeline +triggers: + trigger: auto + push: + branches: + include: + - master stages: - - stage: - name: compile + - name: compile displayName: 编译 + strategy: naturally + trigger: auto steps: - step: build@maven name: build_maven displayName: Maven 构建 - # 支持6、7、8、9、10、11六个版本 jdkVersion: 8 - # 支持2.2.1、3.2.5、3.3.9、3.5.2、3.5.3、3.5.4、3.6.1、3.6.3八个版本 mavenVersion: 3.3.9 - # 构建命令 commands: - mvn -B clean package -Dmaven.test.skip=true - # 非必填字段,开启后表示将构建产物暂存,但不会上传到制品库中,7天后自动清除 artifacts: - # 构建产物名字,作为产物的唯一标识可向下传递,支持自定义,默认为BUILD_ARTIFACT。在下游可以通过${BUILD_ARTIFACT}方式引用来获取构建物地址 - name: BUILD_ARTIFACT - # 构建产物获取路径,是指代码编译完毕之后构建物的所在路径,如通常jar包在target目录下。当前目录为代码库根目录 path: - ./target + - step: sc@opensca + name: open_sca + displayName: OpenSCA 开源组件检测 + detectPath: ./ + notify: [] + strategy: + retry: '0' + dependsOn: build_maven - step: publish@general_artifacts name: publish_general_artifacts displayName: 上传制品 - # 上游构建任务定义的产物名,默认BUILD_ARTIFACT dependArtifact: BUILD_ARTIFACT - # 上传到制品库时的制品命名,默认output artifactName: output - dependsOn: build_maven - - stage: - name: release + dependsOn: open_sca + - name: release displayName: 发布 + strategy: naturally + trigger: auto steps: - step: publish@release_artifacts name: publish_release_artifacts - displayName: '发布' - # 上游上传制品任务的产出 + displayName: 发布 dependArtifact: output - # 发布制品版本号 - version: '1.0.0.0' - # 是否开启版本号自增,默认开启 + version: 1.0.0.0 autoIncrement: true -triggers: - push: - branches: - include: - - master -- Gitee From fbc9be3d8bf23f0052477ec29dcf07185e31d8f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BD=AD?= <252054576@qq.com> Date: Wed, 11 Sep 2024 02:46:34 +0000 Subject: [PATCH 4/4] update master-pipeline.yml -- Gitee