Skip to content

Commit 20acaf7

Browse files
author
李浩
committed
Merge remote-tracking branch 'origin/hotfix-1.1.12' into hotfix-1.2.7
2 parents 2d3b988 + 679831d commit 20acaf7

File tree

5 files changed

+31
-13
lines changed

5 files changed

+31
-13
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
44
<modelVersion>4.0.0</modelVersion>
55
<artifactId>devops-service</artifactId>
6-
<version>1.2.6.RELEASE</version>
6+
<version>1.2.7.RELEASE</version>
77
<packaging>jar</packaging>
88
<url>https://github.com/open-hand/devops-service</url>
99

src/main/java/io/choerodon/devops/api/ws/host/HostAgentSocketHandler.java

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import java.util.List;
66
import java.util.Map;
77
import java.util.Objects;
8+
import java.util.concurrent.TimeUnit;
89
import javax.annotation.PostConstruct;
910
import org.hzero.websocket.constant.ClientWebSocketConstant;
1011
import org.hzero.websocket.vo.MsgVO;
@@ -39,6 +40,8 @@
3940
public class HostAgentSocketHandler extends AbstractSocketHandler {
4041

4142
private static final Logger LOGGER = LoggerFactory.getLogger(HostAgentSocketHandler.class);
43+
private static final String C7N_AGENT_UPGRADE_COUNT_REDIS_KEY = "host:%s";
44+
private static final Integer C7N_AGENT_MAX_UPGRADE_ATTEMPT_COUNT = 3;
4245

4346
private final Map<String, HostMsgHandler> hostMsgHandlerMap = new HashMap<>();
4447

@@ -79,18 +82,32 @@ public void afterConnectionEstablished(WebSocketSession session) {
7982
hostSessionVO.setRegisterKey(WebSocketTool.getGroup(session));
8083
redisTemplate.opsForHash().put(DevopsHostConstants.HOST_SESSION, hostSessionVO.getRegisterKey(), hostSessionVO);
8184

82-
MsgVO msgVO = new MsgVO();
85+
MsgVO msgVO;
8386
// 版本不一致,需要升级
8487
if (!agentVersion.equals(WebSocketTool.getVersion(session))) {
85-
DevopsHostDTO devopsHostDTO = devopsHostService.baseQuery(Long.parseLong(hostId));
86-
HostMsgVO hostMsgVO = new HostMsgVO();
87-
hostMsgVO.setType(HostCommandEnum.UPGRADE_AGENT.value());
88-
Map<String, String> upgradeInfo = new HashMap<>();
89-
upgradeInfo.put("upgradeCommand", devopsHostService.queryShell(devopsHostDTO.getProjectId(), devopsHostDTO.getId(), true));
90-
upgradeInfo.put("version", agentVersion);
91-
hostMsgVO.setPayload(JsonHelper.marshalByJackson(upgradeInfo));
92-
93-
msgVO = (new MsgVO()).setGroup(DevopsHostConstants.GROUP + hostId).setKey(HostCommandEnum.UPGRADE_AGENT.value()).setMessage(JsonHelper.marshalByJackson(hostMsgVO)).setType(ClientWebSocketConstant.SendType.S_GROUP);
88+
String redisKey = String.format(C7N_AGENT_UPGRADE_COUNT_REDIS_KEY, hostId);
89+
Integer count = (Integer) redisTemplate.opsForValue().get(redisKey);
90+
if (C7N_AGENT_MAX_UPGRADE_ATTEMPT_COUNT.equals(count)) {
91+
// 表示agent进行了3次尝试升级,都失败了,那么agent应该退出。手动处理升级失败问题
92+
HostMsgVO hostMsgVO = new HostMsgVO();
93+
hostMsgVO.setType(HostCommandEnum.EXIT_AGENT.value());
94+
hostMsgVO.setPayload("{}");
95+
msgVO = (new MsgVO()).setGroup(DevopsHostConstants.GROUP + hostId).setKey(HostCommandEnum.EXIT_AGENT.value()).setMessage(JsonHelper.marshalByJackson(hostMsgVO)).setType(ClientWebSocketConstant.SendType.S_GROUP);
96+
} else {
97+
if (count == null) {
98+
count = 0;
99+
}
100+
count++;
101+
redisTemplate.opsForValue().set(redisKey, count, 1800, TimeUnit.SECONDS);
102+
DevopsHostDTO devopsHostDTO = devopsHostService.baseQuery(Long.parseLong(hostId));
103+
HostMsgVO hostMsgVO = new HostMsgVO();
104+
hostMsgVO.setType(HostCommandEnum.UPGRADE_AGENT.value());
105+
Map<String, String> upgradeInfo = new HashMap<>();
106+
upgradeInfo.put("upgradeCommand", devopsHostService.queryShell(devopsHostDTO.getProjectId(), devopsHostDTO.getId(), true));
107+
upgradeInfo.put("version", agentVersion);
108+
hostMsgVO.setPayload(JsonHelper.marshalByJackson(upgradeInfo));
109+
msgVO = (new MsgVO()).setGroup(DevopsHostConstants.GROUP + hostId).setKey(HostCommandEnum.UPGRADE_AGENT.value()).setMessage(JsonHelper.marshalByJackson(hostMsgVO)).setType(ClientWebSocketConstant.SendType.S_GROUP);
110+
}
94111
} else {
95112
HostMsgVO hostMsgVO = new HostMsgVO();
96113
hostMsgVO.setType(HostCommandEnum.INIT_AGENT.value());

src/main/java/io/choerodon/devops/app/service/impl/DevopsHostServiceImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ public class DevopsHostServiceImpl implements DevopsHostService {
7272
private static final String ERROR_HOST_STATUS_IS_NOT_DISCONNECT = "error.host.status.is.not.disconnect";
7373
private static final String LOGIN_NAME = "loginName";
7474
private static final String REAL_NAME = "realName";
75-
private static final String HOST_AGENT = "curl -o host.sh %s/devops/v1/projects/%d/hosts/%d/download_file/%s && sh host.sh";
75+
private static final String HOST_AGENT = "curl -Lo host.sh %s/devops/v1/projects/%d/hosts/%d/download_file/%s && sh host.sh";
7676
private static final String HOST_UNINSTALL_SHELL = "ps -ef|grep c7n-agent | grep -v grep |awk '{print $2}' |xargs kill -9";
7777
private static final String HOST_ACTIVATE_COMMAND_TEMPLATE;
7878

src/main/java/io/choerodon/devops/infra/enums/host/HostCommandEnum.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ public enum HostCommandEnum {
2828
KILL_MIDDLEWARE("kill_middleware"),
2929
INIT_AGENT("init_agent"),
3030
UPGRADE_AGENT("upgrade_agent"),
31+
EXIT_AGENT("exit_agent"),
3132
INIT_AGENT_FAILED("init_agent_failed"),
3233
/**
3334
* 该事件返回command结果

src/main/resources/shell/host.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ AGENT_LOG=$WORK_DIR/${AGENT_NAME}.log
3131
# 3. 下载执行程序
3232
tar_file=${WORK_DIR}/c7n-agent.tar.gz
3333
echo "Downloading c7n-agent"
34-
curl -o ${tar_file} "{{ BINARY }}"
34+
curl -Lo ${tar_file} "{{ BINARY }}"
3535
tar -zxvf ${tar_file}
3636
echo "c7n-agent downloaded successfully"
3737

0 commit comments

Comments
 (0)