Skip to content

Commit 4c5e8b9

Browse files
committed
2 parents a890bdf + a9ec312 commit 4c5e8b9

29 files changed

Lines changed: 436 additions & 167 deletions

File tree

client/node/common/cmdarg.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,8 @@ def parse_args():
7575
start_parser = subparsers.add_parser('start', help="启动节点")
7676
start_parser.add_argument("-t", "--token", dest='token', type=str, help="个人token,在代码分析网站获取", required=True)
7777
start_parser.add_argument("--org-sid", dest="org_sid", help="团队编号,在代码分析网站获取。指定注册为团队的节点,不指定则为公共节点")
78+
start_parser.add_argument("--tag", dest="tag", help="机器标签")
79+
start_parser.add_argument("--create-from", dest="create_from", type=str, help="客户端节点启动渠道")
7880

7981
# quickscan命令
8082
quickscan_parser = subparsers.add_parser('quickscan', help="执行快速分析")

client/node/quicktask/toolloader.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,20 @@ def load_tools(args):
5353
else:
5454
tool_tasks = QuickScan.get_scan_tasks(languages, labels, {})
5555
tool_names = [task['task_name'] for task in tool_tasks]
56+
57+
custom_tools = []
58+
for tool_name in tool_names:
59+
try:
60+
__import__("tool." + tool_name)
61+
except ModuleNotFoundError:
62+
# 记录自定义工具列表
63+
custom_tools.append(tool_name)
64+
except:
65+
LogPrinter.exception("encounter error.")
66+
pass
67+
5668
LogPrinter.info("Initing other tools ...")
57-
ToolLoader(tool_names=tool_names, task_list=tool_tasks, include_common=False).git_load_tools(print_enable=False)
69+
ToolLoader(tool_names=tool_names, task_list=tool_tasks, custom_tools=custom_tools, include_common=False).git_load_tools(print_enable=False)
5870

5971

6072
if __name__ == '__main__':

client/node/servertask/looprunner.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,9 @@ def __init__(self, args):
4040
TaskRunner.__init__(self)
4141

4242
self._token = args.token
43+
self._tag = args.tag
4344
self._org_sid = args.org_sid
45+
self._create_from = args.create_from
4446
self._server_url = LocalConfig.get_server_url()
4547
# 打印连接的sever地址
4648
LogPrinter.info("using server: %s" % self._server_url)
@@ -140,7 +142,7 @@ def _send_result(self, task):
140142
def run(self):
141143
"""looprunner主函数"""
142144
# 向server注册节点
143-
NodeMgr().register_node(self._server, self._org_sid)
145+
NodeMgr().register_node(self._server, self._tag, self._org_sid, self._create_from)
144146

145147
# 启动心跳上报线程
146148
HeartBeat(self._server).start()

client/node/servertask/nodemgr.py

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import psutil
1515
import uuid
1616
import sys
17+
import socket
1718

1819
from node import app
1920
from platform import platform
@@ -24,23 +25,34 @@
2425
class NodeMgr(object):
2526
"""本地节点管理"""
2627

27-
def register_node(self, server, org_sid=None):
28+
def get_docker_uuid(self, create_from, tag):
29+
"""如果从docker创建,获取到docker的主机名,与标签一起拼接成为节点唯一标识NODE_UUID"""
30+
if create_from and "docker" == create_from:
31+
host_name = socket.gethostname()
32+
return f"{tag}-{host_name}"
33+
return None
34+
35+
def register_node(self, server, tag=None, org_sid=None, create_from=None):
2836
'''用本地node_uuid向server注册,获取server给的node_id。
2937
如果node_id和本地存储node_id不一致,则抛出异常。
30-
31-
:param server: server的node rpc接口
3238
'''
39+
if not tag:
40+
tag = app.settings.OS_TAG_MAP[sys.platform]
3341
node_uuid = app.persist_data.get('NODE_UUID')
3442
if not node_uuid:
35-
node_uuid = uuid.uuid1().hex
43+
node_uuid = self.get_docker_uuid(create_from, tag)
44+
if not node_uuid:
45+
node_uuid = uuid.uuid1().hex
3646
app.persist_data['NODE_UUID'] = node_uuid
37-
tag = app.settings.OS_TAG_MAP[sys.platform]
47+
3848
data = {
3949
"uuid": node_uuid,
4050
"tag": tag,
4151
"os_info": app.settings.PLATFORMS[sys.platform],
4252
"org_sid": org_sid # 为空时,表示为公共节点,不为空时,表示指定团队的节点
4353
}
54+
if create_from:
55+
data["create_from"] = create_from
4456
node_id = server.register(data)
4557
LogPrinter.info('node(%s) registered in server node id:%s', node_uuid, node_id)
4658
app.persist_data['NODE_ID'] = node_id
0 Bytes
Binary file not shown.
528 Bytes
Binary file not shown.
4.38 KB
Binary file not shown.
516 Bytes
Binary file not shown.

plugins/jenkins_plugin/README.md

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,21 @@
33
Jenkins 2.277.1及以上
44

55
# 如何使用插件
6-
https://github.com/Tencent/CodeAnalysis/blob/main/plugins/jenkins_plugin/TCA_Jenkins_Plugin.pdf
6+
https://github.com/Tencent/CodeAnalysis/blob/main/plugins/jenkins_plugin/TCA_Jenkins_Plugin.pdf
7+
8+
# 设置质量门禁
9+
10+
1. 在TCA插件配置`质量门禁`参数,填写一个整数,当前分支的扫描问题量大于质量门禁值时,判断为不通过;否则为通过。完成后会将TCA结果状态(`success`|`failure`)输出到工作空间下的`tca_threshold.txt`文件中,供后续步骤判断和终止流水线。
11+
2. 在TCA插件后增加shell命令步骤,输入以下脚本内容:
12+
13+
```commandline
14+
tca_status=`cat tca_threshold.txt`
15+
if [ "${tca_status}" == "success" ]; then
16+
echo ">> tca scan pass!"
17+
else
18+
echo ">> tca scan fail! exit code 255"
19+
exit 255
20+
fi
21+
```
22+
23+
当质量门禁不通过时,会终止流水线(退出码:255)。

plugins/jenkins_plugin/pom.xml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
33
<modelVersion>4.0.0</modelVersion>
4+
<dependencies>
5+
<dependency>
6+
<groupId>org.json</groupId>
7+
<artifactId>json</artifactId>
8+
<version>20200518</version>
9+
</dependency>
10+
</dependencies>
411
<parent>
512
<groupId>org.jenkins-ci.plugins</groupId>
613
<artifactId>plugin</artifactId>
@@ -29,6 +36,11 @@
2936
<scope>import</scope>
3037
<type>pom</type>
3138
</dependency>
39+
<dependency>
40+
<groupId>org.json</groupId>
41+
<artifactId>json</artifactId>
42+
<version>20160810</version>
43+
</dependency>
3244
</dependencies>
3345
</dependencyManagement>
3446

0 commit comments

Comments
 (0)