CF_91B Queue

这道题目要求计算机场排队的walrus们因前面有更年轻的walrus而不满的情绪值,情绪值等于离它最远的年轻walrus与它的距离。输入包含walrus数量和他们的年龄,输出每个walrus的不满情绪或如果满意则输出-1。

Queue

链接

CF_91B Queue

Description

There are n walruses standing in a queue in an airport. They are numbered starting from the queue’s tail: the 1-st walrus stands at the end of the queue and the n-th walrus stands at the beginning of the queue. The i-th walrus has the age equal to ai.

The i-th walrus becomes displeased if there’s a younger walrus standing in front of him, that is, if exists such j ( i   <   j ) j (i < j) j(i<j), that a i   >   a j a_i > a_j ai>aj. The displeasure of the i i i-th walrus is equal to the number of walruses between him and the furthest walrus ahead of him, which is younger than the i-th one. That is, the further that young walrus stands from him, the stronger the displeasure is.

The airport manager asked you to count for each of n walruses in the queue his displeasure.

Input

The first line contains an integer n ( 2   ≤   n   ≤   1 0 5 ) n (2 ≤ n ≤ 10^5) n(2n105) — the number of walruses in the queue. The second line contains integers a i ( 1   ≤   a i   ≤   1 0 9 ) a_i (1 ≤ a_i ≤ 10^9) ai(1ai109).

Note that some walruses can have the same age but for the displeasure to emerge the walrus that is closer to the head of the queue needs to be strictly younger than the other one.

Output

Print n numbers: if the i-th walrus is pleased with everything, print “ − 1 -1 1” (without the quotes). Otherwise, print the i-th walrus’s displeasure: the number of other walruses that stand between him and the furthest from him younger walrus.

Examples

Input

6
10 8 5 3 50 45

Output

2 1 0 -1 0 -1 

Input

7
10 4 6 3 2 8 15

Output

4 2 1 0 -1 -1 -1 

Input

5
10 3 1 10 11

Output

1 0 -1 -1 -1 

解析

这是一道线段树题目。(当然不止线段树一种做法)

我们通过线段树维护一个区间的最小值。

在查询使 a i > a j a_i>a_j ai>aj 成立的 j j j 时,优先在右子树查找,若右子树无法查询到有效结果,再在查找左子树进行查找。最后查询的结果中使 a i > a j a_i>a_j ai>aj 成立的 j j j 必然是最大的,则 j − i − 1 j-i-1 ji1 必然也是最大的。

代码

#include<cstdio>
#include<map>
#include<iostream>
#include<queue>
#include<vector>
using namespace std;
int n,t[400001],a[100001],ans;
void build(int x,int l,int r)
{
	if(l==r)
	{
		t[x]=a[l];
		return;
	}
	int mid;
	mid=(l+r)/2;
	build(x*2,l,mid);
	build(x*2+1,mid+1,r);
	t[x]=min(t[x*2],t[x*2+1]);
}
int query(int x,int l,int r,int a,int b,int k)
{
	if(a>r||b<l)
		return -1;
	if(t[x]>=k)
		return -1;
	if(l==r)
		return l;
	int pr,pl,m;
	m=(l+r)/2;
	//pl=query(x*2,l,m,a,b,k);
	pr=query(x*2+1,m+1,r,a,b,k);
	if(pr!=-1)//右子树优先 
		return pr;
	else
		return pl=query(x*2,l,m,a,b,k);
}
int main()
{
	//freopen("test.in","r",stdin);
	//freopen("test.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		scanf("%d",&a[i]);
	build(1,1,n);//线段树求区间最小值
	for(int i=1;i<=n;i++)
	{
		ans=query(1,1,n,i+1,n,a[i]);
		if(ans==-1)
			printf("%d ",ans);
		else
			printf("%d ",ans-i-1);
	}
	return 0;
}
import queue import threading import time from typing import Callable, Optional, List """ 使用说明 初始化 传递一个发送函数 接受拼接好的通过变量读取 上层调用类内发送函数 类内接收函数 """ class IsoTpError(Exception): """ISO-TP / UDS 协议异常(支持 0x7F 负响应解析)""" # ========= 翻译表 ========= _SERVICE_NAME = { # 诊断与通信管理类 0x10: "Diagnostic Session Control", 0x11: "ECU Reset", 0x27: "Security Access", 0x28: "Communication Control", 0x3E: "Tester Present", 0x83: "Access Timing Parameter", 0x84: "Secured Data Transmission", 0x85: "Control DTC Setting", 0x86: "Response On Event", 0x87: "Link Control", # 数据传输类 0x22: "Read Data By Identifier", 0x23: "Read Memory By Address", 0x24: "Read Scaling Data By Identifier", 0x2A: "Read Data By Periodic Identifier", 0x2C: "Dynamically Define Data Identifier", 0x2E: "Write Data By Identifier", 0x3D: "Write Memory By Address", # 存储数据传输类 0x34: "Request Download", 0x35: "Request Upload", 0x36: "Transfer Data", 0x37: "Request Transfer Exit", 0x38: "Request File Transfer", # 输入输出控制类 0x2F: "Input Output Control By Identifier", # 远程激活例程类 0x31: "Routine Control", # 故障码相关 0x14: "Clear Diagnostic Information", 0x19: "Read DTC Information", # 负响应占位 0x7F: "Negative Response" } # UDS 负响应码 _NRC = { 0x10: "General Reject", 0x11: "Service Not Supported", 0x12: "Sub-function Not Supported", 0x13: "Incorrect Message Length Or Invalid Format", 0x14: "Response Too Long", 0x21: "Busy – Repeat Request", 0x22: "Conditions Not Correct", 0x24: "Request Sequence Error", 0x25: "No Response From Subnet Component", 0x26: "Failure Prevents Execution Of Requested Action", 0x31: "Request Out Of Range", 0x33: "Security Access Denied", 0x35: "Invalid Key", 0x36: "Exceeded Number Of Attempts", 0x37: "Required Time Delay Not Expired", 0x70: "Upload Download Not Accepted", 0x71: "Transfer Data Suspended", 0x72: "General Programming Failure", 0x73: "Wrong Block Sequence Counter", 0x78: "Request Correctly Received - Response Pending", 0x7E: "Sub-function Not Supported In Active Session", 0x7F: "Service Not Supported In Active Session", 0x81: "Rpm Too High", 0x82: "Rpm Too Low", 0x83: "Engine Is Running", 0x84: "Engine Is Not Running", 0x85: "Engine Run Time Too Low", 0x86: "Temperature Too High", 0x87: "Temperature Too Low", 0x88: "Vehicle Speed Too High", 0x89: "Vehicle Speed Too Low", 0x8A: "Throttle / Pedal Too High", 0x8B: "Throttle / Pedal Too Low", 0x8C: "Transmission Range In Neutral", 0x8D: "Transmission Range In Gear", 0x8F: "Brake Switch(es) Not Closed", 0x90: "Shifter Lever Not In Park", 0x91: "Torque Converter Clutch Locked", 0x92: "Voltage Too High", 0x93: "Voltage Too Low" } # ========= 构造/解析 ========= def __init__(self, message: str, code: int = 0, frame_data: bytes = b""): super().__init__(message) self.code = code self.frame_data = frame_data # 解析 0x7F 负响应帧 def _parse_7f_frame(self) -> tuple[str, str] | None: """ 如果 frame_data 是 0x7F 负响应,返回 (service_name, nrc_desc) 否则返回 None """ if len(self.frame_data) < 3 or self.frame_data[0] != 0x7F: return None service_id = self.frame_data[1] nrc = self.frame_data[2] service_name = self._SERVICE_NAME.get(service_id, f"0x{service_id:02X}") nrc_desc = self._NRC.get(nrc, f"0x{nrc:02X}") return service_name, nrc_desc # ========= 打印 ========= def __str__(self) -> str: # 1) 先看是不是 0x7F 负响应 parsed = self._parse_7f_frame() if parsed: service_name, nrc_desc = parsed msg = f"UDS 负响应 - 服务: {service_name}, 错误: {nrc_desc}" else: # 2) 普通异常,沿用旧格式 msg = f"IsoTpError[{self.code}]: {super().__str__()}" # 3) 如有原始帧,附在末尾 if self.frame_data: try: msg += " | Frame: " + self.frame_data.hex(" ").upper() except Exception: pass return msg # 回调类型 CanFrameSender = Callable[[int, bytes], None] ErrorCallback = Callable[[Exception], None] class UdsIsoTp: # 允许用户填的合法单帧长度(不含 PCI) _DLC_MAP = { 8: 7, 12: 11, 16: 15, 20: 19, 24: 23, 32: 31, 48: 47, 64: 63 } def __init__(self, tx_can_id: int, rx_can_id: int, func_tx_id: int | None = None, default_bs: int = 0, default_stmin: int = 0, on_send: CanFrameSender = lambda cid, d: None, on_error: ErrorCallback = lambda e: print("IsoTpError:", e), tx_dl: int = 8, rx_dl: int = 8): """ tx_can_id: 物理寻址ID rx_can_id: 响应接收ID func_tx_id: 功能寻址ID default_bs/stmin: 回复 FC 时的默认 BS/STmin :30 00 00 on_send: 底层发送回调 (cid, data_bytes) on_error: 异常回调 tx_dl/rx_dl: 发送和接受的长度 """ if tx_dl not in self._DLC_MAP: raise ValueError(f'tx_dl 必须是 {sorted(self._DLC_MAP.keys())} 之一') if rx_dl not in self._DLC_MAP: raise ValueError(f'rx_dl 必须是 {sorted(self._DLC_MAP.keys())} 之一') self.tx_id = tx_can_id self.rx_id = rx_can_id self.func_tx_id = func_tx_id self.default_bs = default_bs self.default_stmin = default_stmin self.on_send = on_send # 必须由上层定义好给到UDS,但是要以什么方式给 不确定 self.on_error = on_error self.tx_dl = tx_dl # self.rx_dl = rx_dl # # 本端发送能力(不含 PCI) sf_max = self._DLC_MAP[tx_dl] self.SF_MAX = sf_max self.FF0_MAX = sf_max - 1 # 连续帧 (10 len ...) self.CF_MAX = sf_max self.RX_CF_MAX = self._DLC_MAP[rx_dl] # 状态变量 self._rx_total = 0 self._rx_buf = bytearray() self._rx_next_sn = 1 self._rx_bs_rem: int = 0 # 剩余还可接收的 CF 帧数 self._rx_bs_val: int = 0 # 当前 BS 值(从上次 FC 带出) self._tx_pending = b'' self._tx_next_sn = 1 self._tx_bs_config = 0 self._tx_bs_remain = 0 self._tx_stmin = 0 self._waiting_fc = False self._req_lock = threading.Lock() self.RX_RESPONSE: bytes | None = None # -------------------------- # 内部:发送底层帧(给 on_send) # -------------------------- def _send_frame(self, can_id: int, data: bytes): """按 指定的 tx_dl 长度整包发出,""" try: out = data.ljust(self.tx_dl, b'\x00') # 用户说多长就多长 print("发出", out.hex()) self.on_send(can_id, out) except Exception as e: ex = IsoTpError(f"on_send 回调异常: {e}", code=9001, frame_data=data) print(ex) try: self.on_error(ex) except Exception: pass # -------------------------- # 发送 UDS:上层调用发送接口 # -------------------------- def send_uds(self, uds_payload: bytes, functional: bool = False, raw: bool = False): if raw: # 刷写模式:不等 FC,直接连发 self._tx_pending = uds_payload self._tx_next_sn = 1 self._waiting_fc = False self._tx_bs_config = 0 self._tx_bs_remain = 0 self._send_consecutive_frames() return # 否则走正常 SF/FF 流程 if functional and self.func_tx_id is None: raise ValueError('功能寻址未配置') tx_id = self.func_tx_id if functional else self.tx_id if not uds_payload or not isinstance(uds_payload, (bytes, bytearray)): raise IsoTpError('uds_payload 必须为非空 bytes', code=1000) # SF if len(uds_payload) <= self.SF_MAX: pci = bytes([(0x0 << 4) | (len(uds_payload) & 0x3F)]) self._send_frame(tx_id, pci + uds_payload) return # FF total = len(uds_payload) ff_pci = bytes([(0x1 << 4) | ((total >> 8) & 0x0F), total & 0xFF]) first = uds_payload[:self.FF0_MAX] self._send_frame(tx_id, ff_pci + first) # 剩余等 FC self._tx_pending = uds_payload[self.FF0_MAX:] self._tx_next_sn = 1 self._waiting_fc = True # -------------------------- # 接收到一帧 CAN(上层必须调用,接收接口) # -------------------------- def on_rx_frame(self, can_id: int, data: bytes): if not data or can_id != self.rx_id: return try: ftype = (data[0] >> 4) & 0x0F # ---------------- SF ---------------- if ftype == 0x0: L = data[0] & 0x3F take = min(L, len(data) - 1) if take != L: raise IsoTpError('SF 长度与 PCI 不符', code=2100, frame_data=data) self.RX_RESPONSE = bytes(data[1:1 + take]) return # ---------------- FF ---------------- if ftype == 0x1: if len(data) < 2: raise IsoTpError('FF 长度错误', code=2000, frame_data=data) total = ((data[0] & 0x0F) << 8) | data[1] self._rx_total = total self._rx_buf = bytearray(data[2:2 + self.FF0_MAX]) self._rx_next_sn = 1 # 初始化 BS 计数器 ← 新增 self._rx_bs_val = self.default_bs self._rx_bs_rem = self._rx_bs_val fc = bytes([0x30, self._rx_bs_val & 0xFF, self.default_stmin & 0xFF]) self._send_frame(self.tx_id, fc) return # ---------------- CF ---------------- if ftype == 0x2: sn = data[0] & 0x0F if sn != self._rx_next_sn: raise IsoTpError(f'连续帧序号错误 (exp={self._rx_next_sn}, got={sn})', code=2001, frame_data=data) take = min(len(data) - 1, self.RX_CF_MAX) self._rx_buf.extend(data[1:1 + take]) self._rx_next_sn = (self._rx_next_sn + 1) & 0x0F # ====== BS 计数 & 自动二次流控 ====== if self._rx_bs_val > 0: # 0 表示无限制 self._rx_bs_rem -= 1 if self._rx_bs_rem == 0: # 已收满 BS 帧 self._rx_bs_rem = self._rx_bs_val # 重载计数器 fc = bytes([0x30, self._rx_bs_val & 0xFF, self.default_stmin & 0xFF]) self._send_frame(self.tx_id, fc) # ===================================== if len(self._rx_buf) >= self._rx_total: self.RX_RESPONSE = bytes(self._rx_buf[:self._rx_total]) self._rx_buf.clear() self._rx_total = 0 self._rx_next_sn = 1 return # ---------------- FC ---------------- if ftype == 0x3: fs = data[0] & 0x0F bs = data[1] if len(data) > 1 else 0 st = data[2] if len(data) > 2 else 0 self._handle_fc(fs, bs, st, raw=data) return print(f'[WARN] 未知 PCI 类型: {hex(ftype)} frame={data.hex(" ").upper()}') except IsoTpError as e: print(e) try: self.on_error(e) except Exception: pass self.reset() # -------------------------- # 处理流控帧 (FC) # -------------------------- def _handle_fc(self, fs: int, bs: int, st: int, raw: bytes = b""): """ fs: 0x0 CTS, 0x1 WAIT, 0x2 OVR/ABORT """ if fs == 0x0: # CTS self._tx_bs_config = bs self._tx_bs_remain = bs self._tx_stmin = st self._waiting_fc = False self._send_consecutive_frames() elif fs == 0x1: # WAIT self._waiting_fc = True print("[INFO] FlowControl: WAIT received; pausing TX until next FC") elif fs == 0x2: # Overflow/Abort self._tx_pending = b"" self._waiting_fc = False raise IsoTpError("FlowControl: OVERFLOW/ABORT received", code=3001, frame_data=raw) else: raise IsoTpError(f"Unknown FlowControl status {fs}", code=3002, frame_data=raw) # -------------------------- # 实际连续帧发送 # -------------------------- def _send_consecutive_frames(self): if not self._tx_pending: return bs = self._tx_bs_config st = self._tx_stmin seq = self._tx_next_sn def _sleep_stmin(val: int): if val == 0: return if 0x01 <= val <= 0x7F: time.sleep(val / 1000.0) elif 0xF1 <= val <= 0xF9: time.sleep((val - 0xF0) / 10000.0) while self._tx_pending and (bs == 0 or self._tx_bs_remain > 0): chunk = self._tx_pending[:self.CF_MAX] # ← 改动 self._tx_pending = self._tx_pending[self.CF_MAX:] cf_pci = bytes([(0x2 << 4) | (seq & 0x0F)]) self._send_frame(self.tx_id, cf_pci + chunk) seq = (seq + 1) & 0x0F if bs != 0: self._tx_bs_remain -= 1 if self._tx_bs_remain == 0: self._waiting_fc = True break _sleep_stmin(st) self._tx_next_sn = seq if not self._tx_pending: self._waiting_fc = False # -------------------------- # 工具函数 # -------------------------- def reset(self): # 可以在上层设置超时时间 如果长时间没有接收到数据可以清理当前缓存和busy状态 """复位收发状态机""" self._rx_buf.clear() self._rx_total = 0 self._rx_next_sn = 1 self._tx_pending = b"" self._tx_next_sn = 1 self._waiting_fc = False self.RX_RESPONSE = None def is_busy(self) -> bool: """是否有请求在进行""" return self._waiting_fc or bool(self._tx_pending) 这个接口有什么可以优化的
09-16
[2025-07-14 20:06:37] [INFO] =========== pipeline agent basic information =========== [2025-07-14 20:06:37] [INFO] Fuxi Pipeline Agent version is [68217331] build time is [2023-11-28 18:17:06] [2025-07-14 20:06:37] [INFO] Query pipeline plugin definition [2025-07-14 20:06:37] [INFO] start to get dynamic token [2025-07-14 20:06:37] [INFO] successfully get dynamic token from fuxi-security [2025-07-14 20:06:37] [INFO] =========== fuxi plugin basic information =========== [2025-07-14 20:06:37] [INFO] plugin name : jenkins_task [2025-07-14 20:06:37] [INFO] plugin version : 1.0.83 [2025-07-14 20:06:37] [INFO] plugin execute command : python jenkins.py [2025-07-14 20:06:37] [INFO] plugin execute stop command : python stop.py [2025-07-14 20:06:37] [INFO] plugin latest modify time : 2025-02-14 10:11:02 +0000 UTC [2025-07-14 20:06:37] [INFO] gatePluginType:[],gateTemplateId:[] [2025-07-14 20:06:37] [INFO] ===========action basic information=========== [2025-07-14 20:06:37] [INFO] actionInstanceId : 995446396814914 [2025-07-14 20:06:37] [INFO] pipelineInstanceId : 995446395938368 [2025-07-14 20:06:37] [INFO] logId : 145074632605552 [2025-07-14 20:06:37] [INFO] no need to download vars from obs [2025-07-14 20:06:37] [INFO] ================= start execute command ===================== [2025-07-14 20:06:37] [INFO] current plugin tags:[[]] [2025-07-14 20:06:37] [INFO] current action flag [START] [2025-07-14 20:06:37] [INFO] start exec command is [python jenkins.py] [2025-07-14 20:06:37] [INFO] ============ exec command dir is [/] ============= [2025-07-14 20:06:37] [INFO] ============ start exec command output==================== [2025-07-14 20:06:37] [INFO] current SYSTEM_FUXI_EXECUTE_PLUGIN_NAME_BY_HOOK:[jenkins_task] ERROR: never get env variable ENV with valid value `production|pro` [2025-07-14 20:06:37] [INFO] start to get dynamic token [2025-07-14 20:06:37] [INFO] 调用fuxi接口获取用户动态token成功! [2025-07-14 20:06:37] [INFO] start to get dynamic token [2025-07-14 20:06:37] [INFO] 调用fuxi接口获取用户动态token成功! [2025-07-14 20:06:37] [INFO] 获取流水线过程数据, URL:https://fuxi.huawei.com/pipeline/api/v2/executions/995446395938368/actions/995446396814914/process_data?get_metadata=false [2025-07-14 20:06:37] [INFO] start to get dynamic token [2025-07-14 20:06:37] [INFO] 调用fuxi接口获取用户动态token成功! [2025-07-14 20:06:37] [INFO] 流水线过程数据为:{'code': 0, 'data': {}, 'msg': None} [2025-07-14 20:06:37] [INFO] job [DeployJob_22] is starting... [2025-07-14 20:06:37] [INFO] build url :https://fuxi.huawei.com/jenkins-proxy/api/v2/jobs/DeployJob_22/build [2025-07-14 20:06:37] [INFO] start to get dynamic token [2025-07-14 20:06:37] [INFO] 调用fuxi接口获取用户动态token成功! [2025-07-14 20:06:37] [INFO] 调用CID元数据中心,url:https://fuxi.huawei.com/MetaCenter/api/v1/trace/target/name/batch [2025-07-14 20:06:37] [INFO] 3rd-jenkins url:http://7.189.144.105:8080/jenkins [2025-07-14 20:06:37] [INFO] data:{'params': {'FUXI_BUILD_ID': '******', 'UPDATE_DB': '******', 'FUXI_CID_ARTIFACT': '[{"pkg_name": "registry-cbu.huawei.com/powercloud/dpngiottestservice:25.2.0.B003_20250714200150", "pkg_url": "registry-cbu.huawei.com/powercloud/dpngiottestservice:25.2.0.B003_20250714200150", "sha256_url": "registry-cbu.huawei.com/powercloud/dpngiottestservice:25.2.0.B003_20250714200150.sha256", "pkg_md5": "fc7c19cd27e1fb9343f423ef9ffbc46859f6b2c8d426d60eacc05fae4f8c3857", "commit_id": "3722ae7db84a553071d0324a4a53812128c8557f", "cid_build_id": "104308461", "type": "image", "comp_name": "DPNgIotTestService", "name": "DPNgIotTestService", "hash": "104308461", "buildId": "6874f1add4ab87000f320e76", "artifact": "registry-cbu.huawei.com/powercloud/dpngiottestservice:25.2.0.B003_20250714200150", "artifactName": "registry-cbu.huawei.com/powercloud/dpngiottestservice:25.2.0.B003_20250714200150", "commit": "3722ae7db84a553071d0324a4a53812128c8557f", "branches": "feature_20250519162829_SZL_master", "tag": null, "tags": ["FUXI_GREEN", "FUXI_SIGNATURE_BUILD"], "schema": [], "serviceType": "component", "schemas": [], "buildSource": [{"artifact": "https://codehub-g.huawei.com/DigitalPowerCloud/IOTPlatform/DPNgIotTestService.git", "commit": "3722ae7db84a553071d0324a4a53812128c8557f", "type": "git/codehub", "branch": "feature_20250519162829_SZL_master", "patch": null, "lang": null, "scope": null, "repo_label": null, "checksum_type": null, "merge_from_ref": null, "trigger_source": null}], "platform": "x86_64", "sha256": "fc7c19cd27e1fb9343f423ef9ffbc46859f6b2c8d426d60eacc05fae4f8c3857", "artifact_commit": "fc7c19cd27e1fb9343f423ef9ffbc46859f6b2c8d426d60eacc05fae4f8c3857", "build_user": "s00918795", "cleaned": false, "pipeline_inst_id": "995446395938368", "file_size": "1031623193", "create_time": "2025-07-14 20:05:43", "sub_packages": [], "pkg_type": "component"}, {"pkg_name": "chart-iot-25.2.0.B003-20250714200149.zip", "pkg_url": "https://cmc-nkg-artifactory.cmc.tools.huawei.com/artifactory/hwcloud-artifact/cloudbuild2.0/10102919/2AF2YKFE-144N-M680-0000-97TAXQN0uo7u/1752494591286/chart-iot-25.2.0.B003-20250714200149.zip", "sha256_url": "https://cmc-nkg-artifactory.cmc.tools.huawei.com/artifactory/hwcloud-artifact/cloudbuild2.0/10102919/2AF2YKFE-144N-M680-0000-97TAXQN0uo7u/1752494591286/chart-iot-25.2.0.B003-20250714200149.zip.sha256", "pkg_md5": "0bea5400476081e34066fb3985890eda", "commit_id": "07b672804bb4f54b2e2ed5ea12b1ea1e6827f0c6", "cid_build_id": "104308343", "type": "package", "comp_name": "ChartIOT", "name": "ChartIOT", "hash": "104308343", "buildId": "6874f1ada81e46000f4c20f2", "artifact": "https://cmc-nkg-artifactory.cmc.tools.huawei.com/artifactory/hwcloud-artifact/cloudbuild2.0/10102919/2AF2YKFE-144N-M680-0000-97TAXQN0uo7u/1752494591286/chart-iot-25.2.0.B003-20250714200149.zip", "artifactName": "chart-iot-25.2.0.B003-20250714200149.zip", "commit": "07b672804bb4f54b2e2ed5ea12b1ea1e6827f0c6", "branches": "feature_20250423163511_ngiottest", "tag": null, "tags": ["FUXI_GREEN", "FUXI_SIGNATURE_BUILD", "FUXI_TRANSFER_PREPUB", "FUXI_KIA"], "schema": [], "serviceType": "component", "schemas": [], "buildSource": [{"artifact": "https://codehub-g.huawei.com/DigitalPowerCloud/IOTPlatform/ChartIOT.git", "commit": "07b672804bb4f54b2e2ed5ea12b1ea1e6827f0c6", "type": "git/codehub", "branch": "feature_20250423163511_ngiottest", "patch": null, "lang": null, "scope": null, "repo_label": null, "checksum_type": null, "merge_from_ref": null, "trigger_source": null}], "platform": "x86_64", "sha256": "cfcc58f2cf953bd001a6223de66bb2cc5349faae3a908e4f4cd9e5d6c92d3a48", "artifact_commit": "0bea5400476081e34066fb3985890eda", "build_user": "s00918795", "cleaned": false, "pipeline_inst_id": "995446395938368", "file_size": "455397", "create_time": "2025-07-14 20:03:38", "sub_packages": [], "pkg_type": "component"}]', 'ENV_FUXI_CID_BUILD': '{}', 'FUXI_OUTPUT_DEPEND': '[{"OBS-ChartIOT": {"current": "obs", "transfer_process": [{"process_name": "\\u4f20\\u5305\\u5230OBS", "process_type": "obs"}], "result": [{"src_file": "chart-iot-25.2.0.B003-20250714200149.zip", "dst_file": "https://cn-north-5-neteco-resource.obs.cn-north-5.myhuaweicloud.com/helm-chart/chart-iot-25.2.0.B003-20250714200149.zip", "region": "\\u534e\\u5317-\\u4e4c\\u5170\\u5bdf\\u5e03\\u4e8c\\u96f6\\u4e00", "status": "SUCCESS"}, {"src_file": "chart-iot-25.2.0.B003-20250714200149.zip.cms", "dst_file": "https://cn-north-5-neteco-resource.obs.cn-north-5.myhuaweicloud.com/helm-chart/chart-iot-25.2.0.B003-20250714200149.zip.cms", "region": "\\u534e\\u5317-\\u4e4c\\u5170\\u5bdf\\u5e03\\u4e8c\\u96f6\\u4e00", "status": "SUCCESS"}, {"src_file": "chart-iot-25.2.0.B003-20250714200149.zip.cms.crl", "dst_file": "https://cn-north-5-neteco-resource.obs.cn-north-5.myhuaweicloud.com/helm-chart/chart-iot-25.2.0.B003-20250714200149.zip.cms.crl", "region": "\\u534e\\u5317-\\u4e4c\\u5170\\u5bdf\\u5e03\\u4e8c\\u96f6\\u4e00", "status": "SUCCESS"}], "push_pkg_start": "2025-07-14 20:05:52", "push_pkg_end": "2025-07-14 20:06:02", "push_pkg_task_id": "3ae9ff98-4902-4adb-9320-57813044b67c", "push_pkg_status": "success", "stop_tasks_data": "https://api-g.fuxi.huawei.com/transferPkg/api/v1/obs/task/cancel/3ae9ff98-4902-4adb-9320-57813044b67c"}}, {"SWR-DPNgIotTestService": [{"src_image": "registry-cbu.huawei.com/powercloud/dpngiottestservice:25.2.0.B003_20250714200150", "comp_name": "DPNgIotTestService", "log_url": "/2025/07/14/721571819175060.txt", "sub_task_id": "da96569d-af97-490b-98cb-12d0464b6309", "comp_id": "10121800", "region": "\\u534e\\u5317-\\u4e4c\\u5170\\u5bdf\\u5e03\\u4e8c\\u96f6\\u4e00", "dst_image": "swr.cn-north-5.myhuaweicloud.com/powercloud/dpngiottestservice:25.2.0.B003_20250714200150", "status": "SUCCESS", "image_type": "image", "region_code": "cn-north-5"}]}]', 'FUXI_INST_ID': '995446395938368', 'ENV_FUXI_CALLBACK_URL': 'http://fuxi.huawei.com/pipeline/api/v2/actions/995446396814914/test_result_callback', 'ENV_FUXI_DEV_BRANCH': '[]'}} [2025-07-14 20:06:37] [INFO] actionInstanceId:995446396814914, with data params [2025-07-14 20:06:39] [INFO] start job success: queue_id: 714291 [2025-07-14 20:06:39] [INFO] start to get dynamic token [2025-07-14 20:06:39] [INFO] 调用fuxi接口获取用户动态token成功! [2025-07-14 20:06:39] [INFO] call pipeline_api_cb: url[http://fuxi.huawei.com/pipeline/api/v2/actions/995446396814914/callback], data[{'build_number': '145074632605552', 'executeStatus': 1, 'business_data': {'third_jenkins_jobname': 'DeployJob_22', 'third_jenkins_queue_id': '714291', 'third_jenkins_build_number': 0, 'third_jenkins_url': 'http://7.189.144.105:8080/jenkins', 'third_jenkins_user': 'admin', 'progress': '0'}}] [2025-07-14 20:06:39] [INFO] looking for build_number ... [2025-07-14 20:06:39] [INFO] pipeline-api url:https://fuxi.huawei.com/jenkins-proxy/api/v2/get_build_number?queue_id=714291&location=http://7.189.144.105:8080/jenkins/queue/item/714291/api/json, 3rd-jenkins url:http://7.189.144.105:8080/jenkins [2025-07-14 20:06:44] [WARN] (1/120) 调用第三方jenkins暂未查询到build_number,原因:Finished waiting [2025-07-14 20:06:50] [INFO] build number found: 26853 [2025-07-14 20:06:50] [INFO] start to get dynamic token [2025-07-14 20:06:50] [INFO] 调用fuxi接口获取用户动态token成功! [2025-07-14 20:06:50] [INFO] call pipeline_api_cb: url[http://fuxi.huawei.com/pipeline/api/v2/actions/995446396814914/callback], data[{'build_number': '145074632605552', 'executeStatus': 2, 'business_data': {'third_jenkins_jobname': 'DeployJob_22', 'third_jenkins_queue_id': '714291', 'third_jenkins_build_number': 26853, 'third_jenkins_url': 'http://7.189.144.105:8080/jenkins', 'third_jenkins_user': 'admin', 'progress': '0'}}] [2025-07-14 20:06:56] [INFO] get_build_info success: result:{'_class': 'org.jenkinsci.plugins.workflow.job.WorkflowRun', 'building': True, 'result': None} [2025-07-14 20:06:56] [INFO] start to get dynamic token [2025-07-14 20:06:56] [INFO] 调用fuxi接口获取用户动态token成功! [2025-07-14 20:06:56] [INFO] call pipeline_api_cb: url[http://fuxi.huawei.com/pipeline/api/v2/actions/995446396814914/callback], data[{'build_number': '145074632605552', 'executeStatus': 2, 'business_data': {'third_jenkins_jobname': 'DeployJob_22', 'third_jenkins_queue_id': '714291', 'third_jenkins_build_number': 26853, 'third_jenkins_url': 'http://7.189.144.105:8080/jenkins', 'third_jenkins_user': 'admin', 'progress': '0'}}] Started by user ciadmin Running in Durability level: MAX_SURVIVABILITY [Pipeline] Start of Pipeline [Pipeline] node Running on TF-test-100.85.224.241 in /root/jenkins_workspace/workspace/DeployJob_22 [Pipeline] { [Pipeline] withCredentials Masking supported pattern matches of $USER or $USER_USR or $USER_PSW [Pipeline] { [Pipeline] stage [Pipeline] { (Example) [Pipeline] sh [{"OBS-ChartIOT": {"current": "obs", "transfer_process": [{"process_name": "\u4f20\u5305\u5230OBS", "process_type": "obs"}], "result": [{"src_file": "chart-iot-25.2.0.B003-20250714200149.zip", "dst_file": "https://cn-north-5-neteco-resource.obs.cn-north-5.myhuaweicloud.com/helm-chart/chart-iot-25.2.0.B003-20250714200149.zip", "region": "\u534e\u5317-\u4e4c\u5170\u5bdf\u5e03\u4e8c\u96f6\u4e00", "status": "SUCCESS"}, {"src_file": "chart-iot-25.2.0.B003-20250714200149.zip.cms", "dst_file": "https://cn-north-5-neteco-resource.obs.cn-north-5.myhuaweicloud.com/helm-chart/chart-iot-25.2.0.B003-20250714200149.zip.cms", "region": "\u534e\u5317-\u4e4c\u5170\u5bdf\u5e03\u4e8c\u96f6\u4e00", "status": "SUCCESS"}, {"src_file": "chart-iot-25.2.0.B003-20250714200149.zip.cms.crl", "dst_file": "https://cn-north-5-neteco-resource.obs.cn-north-5.myhuaweicloud.com/helm-chart/chart-iot-25.2.0.B003-20250714200149.zip.cms.crl", "region": "\u534e\u5317-\u4e4c\u5170\u5bdf\u5e03\u4e8c\u96f6\u4e00", "status": "SUCCESS"}], "push_pkg_start": "2025-07-14 20:05:52", "push_pkg_end": "2025-07-14 20:06:02", "push_pkg_task_id": "3ae9ff98-4902-4adb-9320-57813044b67c", "push_pkg_status": "success", "stop_tasks_data": "https://api-g.fuxi.huawei.com/transferPkg/api/v1/obs/task/cancel/3ae9ff98-4902-4adb-9320-57813044b67c"}}, {"SWR-DPNgIotTestService": [{"src_image": "registry-cbu.huawei.com/powercloud/dpngiottestservice:25.2.0.B003_20250714200150", "comp_name": "DPNgIotTestService", "log_url": "/2025/07/14/721571819175060.txt", "sub_task_id": "da96569d-af97-490b-98cb-12d0464b6309", "comp_id": "10121800", "region": "\u534e\u5317-\u4e4c\u5170\u5bdf\u5e03\u4e8c\u96f6\u4e00", "dst_image": "swr.cn-north-5.myhuaweicloud.com/powercloud/dpngiottestservice:25.2.0.B003_20250714200150", "status": "SUCCESS", "image_type": "image", "region_code": "cn-north-5"}]}] spawn ssh ****@100.93.30.144 cd /opt/****/jenkins_script/master_node/ bash deploy.sh **** TmV0RWNvXEA2NjY2Cg== W3siT0JTLUNoYXJ0SU9UIjogeyJjdXJyZW50IjogIm9icyIsICJ0cmFuc2Zlcl9wcm9jZXNzIjogW3sicHJvY2Vzc19uYW1lIjogIlx1NGYyMFx1NTMwNVx1NTIzME9CUyIsICJwcm9jZXNzX3R5cGUiOiAib2JzIn1dLCAicmVzdWx0IjogW3sic3JjX2ZpbGUiOiAiY2hhcnQtaW90LTI1LjIuMC5CMDAzLTIwMjUwNzE0MjAwMTQ5LnppcCIsICJkc3RfZmlsZSI6ICJodHRwczovL2NuLW5vcnRoLTUtbmV0ZWNvLXJlc291cmNlLm9icy5jbi1ub3J0aC01Lm15aHVhd2VpY2xvdWQuY29tL2hlbG0tY2hhcnQvY2hhcnQtaW90LTI1LjIuMC5CMDAzLTIwMjUwNzE0MjAwMTQ5LnppcCIsICJyZWdpb24iOiAiXHU1MzRlXHU1MzE3LVx1NGU0Y1x1NTE3MFx1NWJkZlx1NWUwM1x1NGU4Y1x1OTZmNlx1NGUwMCIsICJzdGF0dXMiOiAiU1VDQ0VTUyJ9LCB7InNyY19maWxlIjogImNoYXJ0LWlvdC0yNS4yLjAuQjAwMy0yMDI1MDcxNDIwMDE0OS56aXAuY21zIiwgImRzdF9maWxlIjogImh0dHBzOi8vY24tbm9ydGgtNS1uZXRlY28tcmVzb3VyY2Uub2JzLmNuLW5vcnRoLTUubXlodWF3ZWljbG91ZC5jb20vaGVsbS1jaGFydC9jaGFydC1pb3QtMjUuMi4wLkIwMDMtMjAyNTA3MTQyMDAxNDkuemlwLmNtcyIsICJyZWdpb24iOiAiXHU1MzRlXHU1MzE3LVx1NGU0Y1x1NTE3MFx1NWJkZlx1NWUwM1x1NGU4Y1x1OTZmNlx1NGUwMCIsICJzdGF0dXMiOiAiU1VDQ0VTUyJ9LCB7InNyY19maWxlIjogImNoYXJ0LWlvdC0yNS4yLjAuQjAwMy0yMDI1MDcxNDIwMDE0OS56aXAuY21zLmNybCIsICJkc3RfZmlsZSI6ICJodHRwczovL2NuLW5vcnRoLTUtbmV0ZWNvLXJlc291cmNlLm9icy5jbi1ub3J0aC01Lm15aHVhd2VpY2xvdWQuY29tL2hlbG0tY2hhcnQvY2hhcnQtaW90LTI1LjIuMC5CMDAzLTIwMjUwNzE0MjAwMTQ5LnppcC5jbXMuY3JsIiwgInJlZ2lvbiI6ICJcdTUzNGVcdTUzMTctXHU0ZTRjXHU1MTcwXHU1YmRmXHU1ZTAzXHU0ZThjXHU5NmY2XHU0ZTAwIiwgInN0YXR1cyI6ICJTVUNDRVNTIn1dLCAicHVzaF9wa2dfc3RhcnQiOiAiMjAyNS0wNy0xNCAyMDowNTo1MiIsICJwdXNoX3BrZ19lbmQiOiAiMjAyNS0wNy0xNCAyMDowNjowMiIsICJwdXNoX3BrZ190YXNrX2lkIjogIjNhZTlmZjk4LTQ5MDItNGFkYi05MzIwLTU3ODEzMDQ0YjY3YyIsICJwdXNoX3BrZ19zdGF0dXMiOiAic3VjY2VzcyIsICJzdG9wX3Rhc2tzX2RhdGEiOiAiaHR0cHM6Ly9hcGktZy5mdXhpLmh1YXdlaS5jb20vdHJhbnNmZXJQa2cvYXBpL3YxL29icy90YXNrL2NhbmNlbC8zYWU5ZmY5OC00OTAyLTRhZGItOTMyMC01NzgxMzA0NGI2N2MifX0sIHsiU1dSLURQTmdJb3RUZXN0U2VydmljZSI6IFt7InNyY19pbWFnZSI6ICJyZWdpc3RyeS1jYnUuaHVhd2VpLmNvbS9wb3dlcmNsb3VkL2Rwbmdpb3R0ZXN0c2VydmljZToyNS4yLjAuQjAwM18yMDI1MDcxNDIwMDE1MCIsICJjb21wX25hbWUiOiAiRFBOZ0lvdFRlc3RTZXJ2aWNlIiwgImxvZ191cmwiOiAiLzIwMjUvMDcvMTQvNzIxNTcxODE5MTc1MDYwLnR4dCIsICJzdWJfdGFza19pZCI6ICJkYTk2NTY5ZC1hZjk3LTQ5MGItOThjYi0xMmQwNDY0YjYzMDkiLCAiY29tcF9pZCI6ICIxMDEyMTgwMCIsICJyZWdpb24iOiAiXHU1MzRlXHU1MzE3LVx1NGU0Y1x1NTE3MFx1NWJkZlx1NWUwM1x1NGU4Y1x1OTZmNlx1NGUwMCIsICJkc3RfaW1hZ2UiOiAic3dyLmNuLW5vcnRoLTUubXlodWF3ZWljbG91ZC5jb20vcG93ZXJjbG91ZC9kcG5naW90dGVzdHNlcnZpY2U6MjUuMi4wLkIwMDNfMjAyNTA3MTQyMDAxNTAiLCAic3RhdHVzIjogIlNVQ0NFU1MiLCAiaW1hZ2VfdHlwZSI6ICJpbWFnZSIsICJyZWdpb25fY29kZSI6ICJjbi1ub3J0aC01In1dfV0= dpiot Authorized users only. All activities may be monitored and reported. ****@100.93.30.144's password: spawn sudo bash Root_deploy.sh **** W3siT0JTLUNoYXJ0SU9UIjogeyJjdXJyZW50IjogIm9icyIsICJ0cmFuc2Zlcl9wcm9jZXNzIjogW3sicHJvY2Vzc19uYW1lIjogIlx1NGYyMFx1NTMwNVx1NTIzME9CUyIsICJwcm9jZXNzX3R5cGUiOiAib2JzIn1dLCAicmVzdWx0IjogW3sic3JjX2ZpbGUiOiAiY2hhcnQtaW90LTI1LjIuMC5CMDAzLTIwMjUwNzE0MjAwMTQ5LnppcCIsICJkc3RfZmlsZSI6ICJodHRwczovL2NuLW5vcnRoLTUtbmV0ZWNvLXJlc291cmNlLm9icy5jbi1ub3J0aC01Lm15aHVhd2VpY2xvdWQuY29tL2hlbG0tY2hhcnQvY2hhcnQtaW90LTI1LjIuMC5CMDAzLTIwMjUwNzE0MjAwMTQ5LnppcCIsICJyZWdpb24iOiAiXHU1MzRlXHU1MzE3LVx1NGU0Y1x1NTE3MFx1NWJkZlx1NWUwM1x1NGU4Y1x1OTZmNlx1NGUwMCIsICJzdGF0dXMiOiAiU1VDQ0VTUyJ9LCB7InNyY19maWxlIjogImNoYXJ0LWlvdC0yNS4yLjAuQjAwMy0yMDI1MDcxNDIwMDE0OS56aXAuY21zIiwgImRzdF9maWxlIjogImh0dHBzOi8vY24tbm9ydGgtNS1uZXRlY28tcmVzb3VyY2Uub2JzLmNuLW5vcnRoLTUubXlodWF3ZWljbG91ZC5jb20vaGVsbS1jaGFydC9jaGFydC1pb3QtMjUuMi4wLkIwMDMtMjAyNTA3MTQyMDAxNDkuemlwLmNtcyIsICJyZWdpb24iOiAiXHU1MzRlXHU1MzE3LVx1NGU0Y1x1NTE3MFx1NWJkZlx1NWUwM1x1NGU4Y1x1OTZmNlx1NGUwMCIsICJzdGF0dXMiOiAiU1VDQ0VTUyJ9LCB7InNyY19maWxlIjogImNoYXJ0LWlvdC0yNS4yLjAuQjAwMy0yMDI1MDcxNDIwMDE0OS56aXAuY21zLmNybCIsICJkc3RfZmlsZSI6ICJodHRwczovL2NuLW5vcnRoLTUtbmV0ZWNvLXJlc291cmNlLm9icy5jbi1ub3J0aC01Lm15aHVhd2VpY2xvdWQuY29tL2hlbG0tY2hhcnQvY2hhcnQtaW90LTI1LjIuMC5CMDAzLTIwMjUwNzE0MjAwMTQ5LnppcC5jbXMuY3JsIiwgInJlZ2lvbiI6ICJcdTUzNGVcdTUzMTctXHU0ZTRjXHU1MTcwXHU1YmRmXHU1ZTAzXHU0ZThjXHU5NmY2XHU0ZTAwIiwgInN0YXR1cyI6ICJTVUNDRVNTIn1dLCAicHVzaF9wa2dfc3RhcnQiOiAiMjAyNS0wNy0xNCAyMDowNTo1MiIsICJwdXNoX3BrZ19lbmQiOiAiMjAyNS0wNy0xNCAyMDowNjowMiIsICJwdXNoX3BrZ190YXNrX2lkIjogIjNhZTlmZjk4LTQ5MDItNGFkYi05MzIwLTU3ODEzMDQ0YjY3YyIsICJwdXNoX3BrZ19zdGF0dXMiOiAic3VjY2VzcyIsICJzdG9wX3Rhc2tzX2RhdGEiOiAiaHR0cHM6Ly9hcGktZy5mdXhpLmh1YXdlaS5jb20vdHJhbnNmZXJQa2cvYXBpL3YxL29icy90YXNrL2NhbmNlbC8zYWU5ZmY5OC00OTAyLTRhZGItOTMyMC01NzgxMzA0NGI2N2MifX0sIHsiU1dSLURQTmdJb3RUZXN0U2VydmljZSI6IFt7InNyY19pbWFnZSI6ICJyZWdpc3RyeS1jYnUuaHVhd2VpLmNvbS9wb3dlcmNsb3VkL2Rwbmdpb3R0ZXN0c2VydmljZToyNS4yLjAuQjAwM18yMDI1MDcxNDIwMDE1MCIsICJjb21wX25hbWUiOiAiRFBOZ0lvdFRlc3RTZXJ2aWNlIiwgImxvZ191cmwiOiAiLzIwMjUvMDcvMTQvNzIxNTcxODE5MTc1MDYwLnR4dCIsICJzdWJfdGFza19pZCI6ICJkYTk2NTY5ZC1hZjk3LTQ5MGItOThjYi0xMmQwNDY0YjYzMDkiLCAiY29tcF9pZCI6ICIxMDEyMTgwMCIsICJyZWdpb24iOiAiXHU1MzRlXHU1MzE3LVx1NGU0Y1x1NTE3MFx1NWJkZlx1NWUwM1x1NGU4Y1x1OTZmNlx1NGUwMCIsICJkc3RfaW1hZ2UiOiAic3dyLmNuLW5vcnRoLTUubXlodWF3ZWljbG91ZC5jb20vcG93ZXJjbG91ZC9kcG5naW90dGVzdHNlcnZpY2U6MjUuMi4wLkIwMDNfMjAyNTA3MTQyMDAxNTAiLCAic3RhdHVzIjogIlNVQ0NFU1MiLCAiaW1hZ2VfdHlwZSI6ICJpbWFnZSIsICJyZWdpb25fY29kZSI6ICJjbi1ub3J0aC01In1dfV0= dpiot cp: cannot stat '/opt/****/jenkins_script/cloud_service_list': No such file or directory [2025-07-14 20:07:25] [INFO] get_build_info success: result:{'building': False, 'result': 'FAILURE', '_class': 'org.jenkinsci.plugins.workflow.job.WorkflowRun'} [2025-07-14 20:07:25] [INFO] start to get dynamic token [2025-07-14 20:07:25] [INFO] 调用fuxi接口获取用户动态token成功! [2025-07-14 20:07:25] [INFO] call pipeline_api_cb: url[http://fuxi.huawei.com/pipeline/api/v2/actions/995446396814914/callback], data[{'build_number': '145074632605552', 'executeStatus': 2, 'business_data': {'third_jenkins_jobname': 'DeployJob_22', 'third_jenkins_queue_id': '714291', 'third_jenkins_build_number': 26853, 'third_jenkins_url': 'http://7.189.144.105:8080/jenkins', 'third_jenkins_user': 'admin', 'progress': '0'}}] dpiot:dpngiottestservice = 25.2.0.B003_20250714200150,chart-iot = chart-iot-25.2.0.B003-20250714200149.zip INFO:root:start backing up service and chart info.... Traceback (most recent call last): File "/opt/****/jenkins_script/python_script/backup_service_info.py", line 60, in <module> sys.exit(backup_main(temp_file_path)) File "/opt/****/jenkins_script/python_script/backup_service_info.py", line 55, in backup_main backup_service_info.backup_service_and_chart_list_info(temp_info_path) File "/opt/****/jenkins_script/python_script/backup_service_info.py", line 36, in backup_service_and_chart_list_info new_service_and_chart_dict = CommonServiceFunc.get_new_service_and_chart_dict_info(new_info_path) File "/opt/****/jenkins_script/python_script/common_service_info.py", line 290, in get_new_service_and_chart_dict_info service_dict = CommonServiceFunc.get_service_dict_info(new_info_path) File "/opt/****/jenkins_script/python_script/common_service_info.py", line 195, in get_service_dict_info namespace_name, service_name) File "/opt/****/jenkins_script/python_script/common_service_info.py", line 131, in get_full_name_by_all_services raise ValueError(f"请检查CCE节点,{namespace_name} = {service_name} 字段是否存在于" ValueError: 请检查CCE节点,dpiot = dpngiottestservice 字段是否存在于/opt/deploycce/config/cloud_service_list/cloud_service_list_xxx.ini文件中 [Pipeline] } [Pipeline] // stage [Pipeline] } [Pipeline] // withCredentials [Pipeline] } [Pipeline] // node [Pipeline] End of Pipeline [BFA] Scanning build for known causes... [BFA] No failure causes found [BFA] Done. 0s java.lang.ClassCastException ERROR: script returned exit code 1 Finished: FAILURE [2025-07-14 20:07:25] [INFO] The Jenkins job [DeployJob_22] has been completed, status=FAILURE [2025-07-14 20:07:25] [ERROR] jenkins任务执行失败,请在jenkins日志里定位错误:[HTTP]http://7.189.144.105:8080/jenkins/job/DeployJob_22/26853/logText/progressiveText,日志:dpiot:dpngiottestservice = 25.2.0.B003_20250714200150,chart-iot = chart-iot-25.2.0.B003-20250714200149.zip INFO:root:start backing up service and chart info.... Traceback (most recent call last): File "/opt/****/jenkins_script/python_script/backup_service_info.py", line 60, in <module> sys.exit(backup_main(temp_file_path)) File "/opt/****/jenkins_script/python_script/backup_service_info.py", line 55, in backup_main backup_service_info.backup_service_and_chart_list_info(temp_info_path) File "/opt/****/jenkins_script/python_script/backup_service_info.py", line 36, in backup_service_and_chart_list_info new_service_and_chart_dict = CommonServiceFunc.get_new_service_and_chart_dict_info(new_info_path) File "/opt/****/jenkins_script/python_script/common_service_info.py", line 290, in get_new_service_and_chart_dict_info service_dict = CommonServiceFunc.get_service_dict_info(new_info_path) File "/opt/****/jenkins_script/python_script/common_service_info.py", line 195, in get_service_dict_info namespace_name, service_name) File "/opt/****/jenkins_script/python_script/common_service_info.py", line 131, in get_full_name_by_all_services raise ValueError(f"请检查CCE节点,{namespace_name} = {service_name} 字段是否存在于" ValueError: 请检查CCE节点,dpiot = dpngiottestservice 字段是否存在于/opt/deploycce/config/cloud_service_list/cloud_service_list_xxx.ini文件中 [Pipeline] } [Pipeline] // stage [Pipeline] } [Pipeline] // withCredentials [Pipeline] } [Pipeline] // node [Pipeline] End of Pipeline [BFA] Scanning build for known causes... [BFA] No failure causes found [BFA] Done. 0s java.lang.ClassCastException ERROR: script returned exit code 1 Finished: FAILURE [2025-07-14 20:07:25] [INFO] start to get dynamic token [2025-07-14 20:07:25] [INFO] 调用fuxi接口获取用户动态token成功! [2025-07-14 20:07:25] [INFO] ================= end of execute command ===================== [2025-07-14 20:07:25] [INFO] command [python jenkins.py] exit code is 1 [2025-07-14 20:07:25] [INFO] final run time is 48.284466s [2025-07-14 20:07:25] [INFO] ================= current plugin status is not success, start to execute STOP command : [python stop.py] ===================== [2025-07-14 20:07:25] [INFO] ================= STOP command status : [{"Cmd":"python","PID":16,"Complete":true,"Exit":0,"Error":null,"StartTs":1752494845768025101,"StopTs":1752494845964766010,"Runtime":0.196741023,"Stdout":null,"Stderr":null}] ===================== ERROR: never get env variable ENV with valid value `production|pro` [2025-07-14 20:07:25] [INFO] status failed, callback status and business data [2025-07-14 20:07:25] [INFO] start to get dynamic token [2025-07-14 20:07:25] [INFO] 调用fuxi接口获取用户动态token成功! [2025-07-14 20:07:25] [INFO] jenkins task auto stop flag is 0! [2025-07-14 20:07:25] [INFO] start to get dynamic token [2025-07-14 20:07:25] [INFO] successfully get dynamic token from fuxi-security [2025-07-14 20:07:26] [INFO] callback to pipeline engine status [success] [{"code":0,"data":null,"msg":null}] [2025-07-14 20:07:26] [INFO] Agent run finished
08-13
源码地址: https://pan.quark.cn/s/3916362e5d0a 在C#编程平台下,构建一个曲线编辑器是一项融合了图形用户界面(GUI)构建、数据管理及数学运算的应用开发任务。 接下来将系统性地介绍这个曲线编辑器开发过程中的核心知识点:1. **定制曲线面板展示数据曲线**: - 控件选用:在C#的Windows Forms或WPF框架中,有多种控件可用于曲线呈现,例如PictureBox或用户自定义的UserControl。 通过处理重绘事件,借助Graphics对象执行绘图动作,如运用DrawCurve方法。 - 数据图形化:通过线性或贝塞尔曲线连接数据点,以呈现数据演变态势。 这要求掌握直线与曲线的数学描述,例如两点间的直线公式、三次贝塞尔曲线等。 - 坐标系统与缩放比例:构建X轴和Y轴,设定坐标标记,并开发缩放功能,使用户可察看不同区间内的数据。 2. **在时间轴上配置多个关键帧数据**: - 时间轴构建:开发一个时间轴组件,显示时间单位刻度,并允许用户在特定时间点设置关键帧。 时间可表现为连续形式或离散形式,关键帧对应于时间轴上的标识。 - 关键帧维护:利用数据结构(例如List或Dictionary)保存关键帧,涵盖时间戳和关联值。 需考虑关键帧的添加、移除及调整位置功能。 3. **调整关键帧数据,通过插值方法获得曲线**: - 插值方法:依据关键帧信息,选用插值方法(如线性插值、样条插值,特别是Catmull-Rom样条)生成平滑曲线。 这涉及数学运算,确保曲线在关键帧之间无缝衔接。 - 即时反馈:在编辑关键帧时,即时刷新曲线显示,优化用户体验。 4. **曲线数据的输出**: - 文件类型:挑选适宜的文件格式存储数据,例如XML、JSON或...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值