diff --git a/.github/workflows/build-push-docker.yml b/.github/workflows/build-push-docker.yml index a5a6baf..dc2433d 100644 --- a/.github/workflows/build-push-docker.yml +++ b/.github/workflows/build-push-docker.yml @@ -128,9 +128,9 @@ jobs: echo "--------------------------------------" cd ./agent/target ls - date --date='TZ="Asia/Shanghai"' --rfc-3339=seconds | cut -d"+" -f1 | sed "s/ /-/g" | sed "s/:/-/g" + echo "current time is $(date --rfc-3339=seconds | cut -d"+" -f1 | sed "s/ /-/g" | sed "s/:/-/g")" echo "start to copy target jar" - cp ./agent-*.jar ./octopus-agent-$(date --date='TZ="Asia/Shanghai"' --rfc-3339=seconds | cut -d"+" -f1 | sed "s/ /-/g" | sed "s/:/-/g").jar + cp ./agent-*.jar ./octopus-agent-$(date --rfc-3339=seconds | cut -d"+" -f1 | sed "s/ /-/g" | sed "s/:/-/g").jar cd /home/runner/work/ProjectOctopus/ProjectOctopus echo "--------------------------------------" cat /proc/cpuinfo diff --git a/agent/src/main/java/io/wdd/agent/executor/CommandExecutor.java b/agent/src/main/java/io/wdd/agent/executor/CommandExecutor.java index 3a1f3b3..cb3375a 100644 --- a/agent/src/main/java/io/wdd/agent/executor/CommandExecutor.java +++ b/agent/src/main/java/io/wdd/agent/executor/CommandExecutor.java @@ -35,7 +35,7 @@ public class CommandExecutor { /** * handle command from octopus server * - * @param executionMessage get from EXECUTOR_HANDLER + * @param executionMessage get from EXECUTOR_HANDLERju */ public void execute(ExecutionMessage executionMessage) { diff --git a/server/src/main/java/io/wdd/rpc/execute/service/CoreExecutionServiceImpl.java b/server/src/main/java/io/wdd/rpc/execute/service/CoreExecutionServiceImpl.java index 26e231d..80b67c3 100644 --- a/server/src/main/java/io/wdd/rpc/execute/service/CoreExecutionServiceImpl.java +++ b/server/src/main/java/io/wdd/rpc/execute/service/CoreExecutionServiceImpl.java @@ -1,5 +1,7 @@ package io.wdd.rpc.execute.service; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import io.wdd.common.beans.executor.ExecutionMessage; import io.wdd.common.beans.rabbitmq.OctopusMessage; import io.wdd.common.beans.rabbitmq.OctopusMessageType; @@ -18,6 +20,8 @@ public class CoreExecutionServiceImpl implements CoreExecutionService { @Resource ToAgentMessageSender messageSender; + @Resource + ObjectMapper objectMapper; @Override public String SendCommandToAgent(String topicName, String command) { @@ -34,11 +38,22 @@ public class CoreExecutionServiceImpl implements CoreExecutionService { OctopusMessage octopusMessage = this.generateOctopusMessage(topicName, type, commandList); + ExecutionMessage executionMessage = (ExecutionMessage) octopusMessage.getContent(); + + String executionMsg; + + try { + + executionMsg = objectMapper.writeValueAsString(executionMessage); + octopusMessage.setContent(executionMsg); + + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + messageSender.send(octopusMessage); - ExecutionMessage content = (ExecutionMessage) octopusMessage.getContent(); - - return content.getResultKey(); + return executionMessage.getResultKey(); } @@ -53,15 +68,16 @@ public class CoreExecutionServiceImpl implements CoreExecutionService { private OctopusMessage generateOctopusMessage(String topicName, String type, List commandList){ + ExecutionMessage executionMessage = generateExecutionMessage( + type, + commandList, + generateCommandResultKey(topicName) + ); return OctopusMessage.builder() .type(OctopusMessageType.EXECUTOR) .init_time(LocalDateTime.now()) - .content(generateExecutionMessage( - type, - commandList, - generateCommandResultKey(topicName) - )) + .content(executionMessage) .uuid(topicName) .build(); } @@ -78,7 +94,7 @@ public class CoreExecutionServiceImpl implements CoreExecutionService { private String generateCommandResultKey(String topicName) { - String TimeString = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + String TimeString = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd-HH-mm-ss")); return topicName + "-" + TimeString; } diff --git a/server/src/main/java/io/wdd/rpc/init/AcceptAgentInitInfo.java b/server/src/main/java/io/wdd/rpc/init/AcceptAgentInitInfo.java index e0266d7..0f4fb94 100644 --- a/server/src/main/java/io/wdd/rpc/init/AcceptAgentInitInfo.java +++ b/server/src/main/java/io/wdd/rpc/init/AcceptAgentInitInfo.java @@ -104,6 +104,7 @@ public class AcceptAgentInitInfo { if (!checkAgentAlreadyRegister(agentQueueTopic)) { // 3. save the agent info into database // backend fixed thread daemon to operate the database ensuring the operation is correct ! + log.info("[AGENT INIT] - agent not exist ! start to register !"); if (!databaseOperator.saveInitOctopusAgentInfo(serverInfoVO)) { throw new MyRuntimeException("database save agent info error !"); } diff --git a/server/src/main/java/io/wdd/rpc/message/handler/OctopusMessageHandlerServer.java b/server/src/main/java/io/wdd/rpc/message/handler/OctopusMessageHandlerServer.java index affac43..442b3da 100644 --- a/server/src/main/java/io/wdd/rpc/message/handler/OctopusMessageHandlerServer.java +++ b/server/src/main/java/io/wdd/rpc/message/handler/OctopusMessageHandlerServer.java @@ -40,8 +40,10 @@ public class OctopusMessageHandlerServer { // todo what to do after received the result - // log info ? - // update the database - // handle the result + // collect all message from agent and log to somewhere + + // 1. send some info to the specific topic name + // 2. judge from which agent the message are + // } } diff --git a/server/src/main/java/io/wdd/rpc/message/sender/ToAgentMessageSender.java b/server/src/main/java/io/wdd/rpc/message/sender/ToAgentMessageSender.java index ddf5e8f..794b0d7 100644 --- a/server/src/main/java/io/wdd/rpc/message/sender/ToAgentMessageSender.java +++ b/server/src/main/java/io/wdd/rpc/message/sender/ToAgentMessageSender.java @@ -53,9 +53,13 @@ public class ToAgentMessageSender { public void send(OctopusMessage octopusMessage) { - log.info("OctopusMessage {} send to agent {}",octopusMessage, octopusMessage.getUuid()); + log.info("OctopusMessage {} send to agent {}", octopusMessage, octopusMessage.getUuid()); + rabbitTemplate.convertAndSend( + initRabbitMQConfig.OCTOPUS_EXCHANGE, + octopusMessage.getUuid()+"*", + writeData(octopusMessage)); } diff --git a/server/src/main/java/io/wdd/server/coreService/impl/CoreServerServiceImpl.java b/server/src/main/java/io/wdd/server/coreService/impl/CoreServerServiceImpl.java index b743f4b..a9f75f0 100644 --- a/server/src/main/java/io/wdd/server/coreService/impl/CoreServerServiceImpl.java +++ b/server/src/main/java/io/wdd/server/coreService/impl/CoreServerServiceImpl.java @@ -10,6 +10,7 @@ import io.wdd.server.beans.vo.ServerInfoVO; import io.wdd.server.coreService.CoreServerService; import io.wdd.server.service.*; import io.wdd.server.utils.EntityUtils; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; @@ -24,6 +25,7 @@ import java.util.stream.Collectors; @Service +@Slf4j public class CoreServerServiceImpl implements CoreServerService { @Resource diff --git a/server/src/main/resources/application-local.yml b/server/src/main/resources/application-local.yml new file mode 100644 index 0000000..ef43407 --- /dev/null +++ b/server/src/main/resources/application-local.yml @@ -0,0 +1,20 @@ +spring: + application: + name: octopus-server + profiles: + active: local + cloud: + nacos: + config: + group: local + config-retry-time: 3000 + file-extension: yaml + max-retry: 3 + # server-addr: 43.154.83.213:21060 + # server-addr: 140.238.52.228:21060 + server-addr: https://nacos.107421.xyz:443 + timeout: 5000 + config-long-poll-timeout: 5000 + extension-configs: + - group: local + data-id: common-local.yaml \ No newline at end of file diff --git a/source/src/main/java/io/wdd/source/shell/AgentBootUp b/source/src/main/java/io/wdd/source/shell/AgentBootUp deleted file mode 100644 index e69de29..0000000 diff --git a/source/src/main/java/io/wdd/source/shell/AgentUpdate.sh b/source/src/main/java/io/wdd/source/shell/AgentUpdate.sh deleted file mode 100644 index 8031f97..0000000 --- a/source/src/main/java/io/wdd/source/shell/AgentUpdate.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash - - -containerId=$(docker ps | grep octopus-agent | awk '{print$1}') - -docker container stop $(containerId) && docker container rm $(containerId) - -echo "y -" | docker container prune - -docker image rmi octopus-agent-ubuntu:latest -y - diff --git a/source/src/main/java/io/wdd/source/shell/agent-bootup.sh b/source/src/main/java/io/wdd/source/shell/agent-bootup.sh index 28492ea..a6b2347 100644 --- a/source/src/main/java/io/wdd/source/shell/agent-bootup.sh +++ b/source/src/main/java/io/wdd/source/shell/agent-bootup.sh @@ -2,7 +2,9 @@ ##### environment variables ###### -RepoSourcePath=https://raw.githubusercontent.com/zeaslity/ProjectOctopus/main/source/src/main/java/io/wdd/source/shell + +JAVA_OPTS="-Xms128m -Xmx512m -Dfile.encoding=utf-8 --spring.profiles.active=k3s --spring.cloud.nacos.config.group=k3s --spring.cloud.nacos.config.extension-configs[0].dataId=common-k3s.yaml --spring.cloud.nacos.config.extension-configs[0].group=k3s" + DependLibFiles=( wdd-lib-file.sh wdd-lib-log.sh @@ -11,6 +13,10 @@ DependLibFiles=( wdd-lib-sys.sh ) + +OctopusAgentUrl=https://happybirthday.107421.xyz/octopus-agent/ + +RepoSourcePath=https://raw.githubusercontent.com/zeaslity/ProjectOctopus/main/source/src/main/java/io/wdd/source/shell OctopusAgentPath=/octopus-agent/shell ##### environment variables ###### @@ -186,20 +192,30 @@ DownloadAllFile() { FunctionStart + colorEcho $RED "[CLEAN_UP] clean the old octopus agent staff !" + rm -rf $OctopusAgentPath/lib + rm -rf $OctopusAgentPath/ + mkdir -p $OctopusAgentPath mkdir -p $OctopusAgentPath/lib echo "start to download all needed lib shell" for libfile in ${DependLibFiles[*]}; do - echo "lib file is $libfile" - wget "$RepoSourcePath/lib/$libfile" -O $OctopusAgentPath/lib/$libfile + + colorEcho $BLUE "lib file is $libfile" + wget "$RepoSourcePath/lib/$libfile" -Oq $OctopusAgentPath/lib/$libfile + FunctionSuccess done colorEcho $BLUE "start to download octopus agent !" # check for latest version # download the lasted jar - wget https://happybirthday.107421.xyz/octopus-agent/octopus-agent-2022-12-21-16-00-00.jar -O /octopus-agent/agent.jar + cd $OctopusAgentPath + colorEcho $BLUE "start to load wdd-lib-os.sh" + . ./lib/wdd-lib-os.sh + CheckAndDownloadLatestVersion + FunctionSuccess FunctionEnd @@ -265,28 +281,38 @@ InstallJDKPackage() { } systemdAgent(){ - local JAVA_OPTS="-Xms128m -Xmx256m" + + # https://www.baeldung.com/linux/run-java-application-as-service cat >/etc/systemd/system/octopus-agent.service </etc/rsyslog.d/octopus-agent.conf <> $i 秒 <<-,准备切换shell,上文的日志输出将会消失!!" + sleep 2 + done + chsh -s /bin/zsh + zsh + else + colorEcho ${RED} "zsh 安装失败,大概率是已经安装!!小概率是无法连接GitHub服务器~~" + fi + FunctionEnd +} + +modifyZSH() { + FunctionStart + + ZSH_SOURCE="us" + + if [[ "$1" -ne " " ]]; then + ZSH_SOURCE="$1" + echo "zsh install source = ${ZSH_SOURCE}" + fi + + colorEcho ${GREEN} "zsh应该已经安装成功!!!" + colorEcho ${BLUE} "开始修改zsh的相关配置信息,使其更加好用…………" + echo "" + cat >~/oh-my-zsh-plugins-list.txt <>/etc/environment</etc/environment.d/octopus-agent.conf<&2 - fi -} +OctopusAgentUrl=https://happybirthday.107421.xyz/octopus-agent/ -######################## -# Log message -# Arguments: -# Message to log -# Returns: -# None -######################### -log() { - stderr_print "${CYAN}${MODULE:-} ${MAGENTA}$(date "+%Y-%m-%d %H:%M:%S.%2N ")${RESET}${*}" -} -######################## -# Log an 'info' message -# Arguments: -# Message to log -# Returns: -# None -######################### -info() { - log "${GREEN}INFO ${RESET} ==> ${*}" -} -######################## -# Log message -# Arguments: -# Message to log -# Returns: -# None -######################### -warn() { - log "${YELLOW}WARN ${RESET} ==> ${*}" -} -######################## -# Log an 'error' message -# Arguments: -# Message to log -# Returns: -# None -######################### -error() { - log "${RED}ERROR${RESET} ==> ${*}" -} -######################## -# Log a 'debug' message -# Globals: -# BITNAMI_DEBUG -# Arguments: -# None -# Returns: -# None -######################### -debug() { - # 'is_boolean_yes' is defined in libvalidations.sh, but depends on this file so we cannot source it - local bool="${BITNAMI_DEBUG:-true}" - # comparison is performed without regard to the case of alphabetic characters - shopt -s nocasematch - if [[ "$bool" = 1 || "$bool" =~ ^(yes|true)$ ]]; then - log "${MAGENTA}DEBUG${RESET} ==> ${*}" - fi -} -######################## -# Indent a string -# Arguments: -# $1 - string -# $2 - number of indentation characters (default: 4) -# $3 - indentation character (default: " ") -# Returns: -# None -######################### -indent() { - local string="${1:-}" - local num="${2:?missing num}" - local char="${3:-" "}" - # Build the indentation unit string - local indent_unit="" - for ((i = 0; i < num; i++)); do - indent_unit="${indent_unit}${char}" - done - # shellcheck disable=SC2001 - # Complex regex, see https://github.com/koalaman/shellcheck/wiki/SC2001#exceptions - echo "$string" | sed "s/^/${indent_unit}/" -} +CheckAndDownloadLatestVersion(){ + + log "checking for the latest version" + local latestVersion=$(curl $OctopusAgentUrl | grep -v h1 | grep "a href=" | awk '{print$2}' |cut -d">" -f2 | cut -d"<" -f1) + + log "octopus agent latest version is => [ $latestVersion ]" + + rm -rf /octopus-agent/*.jar + cd /octopus-agent + + log "start to download the latest version !" + + wget "$OctopusAgentUrl$latestVersion" + cp "$latestVersion" agent.jar + + log "" + echo "" + log "----------------------------------------------" + ls /octopus-agent/ | grep jar + log "----------------------------------------------" + +} \ No newline at end of file diff --git a/source/src/main/java/io/wdd/source/shell/lib/wdd-lib-sys.sh b/source/src/main/java/io/wdd/source/shell/lib/wdd-lib-sys.sh index 104f5b1..43cd23c 100644 --- a/source/src/main/java/io/wdd/source/shell/lib/wdd-lib-sys.sh +++ b/source/src/main/java/io/wdd/source/shell/lib/wdd-lib-sys.sh @@ -1,11 +1,8 @@ #!/bin/bash - - . /octopus-agent/shell/lib/wdd-lib-log.sh - # 判断命令是否存在 command_exists() { command -v "$@" >/dev/null 2>&1 @@ -95,23 +92,65 @@ check_sys() { return 0 } +RED="31m" ## 姨妈红 +GREEN="32m" ## 水鸭青 +YELLOW="33m" ## 鸭屎黄 +PURPLE="35m" ## 基佬紫 +BLUE="36m" ## 天依蓝 +BlinkGreen="32;5m" ##闪烁的绿色 +BlinkRed="31;5m" ##闪烁的红色 +BackRed="41m" ## 背景红色 +SplitLine="----------------------" #会被sys函数中的方法重写 + +######## 颜色函数方法很精妙 ############ +colorEcho() { + echo -e "\033[${1}${@:2}\033[0m" 1>&2 +} + +check_root() { + if [[ $EUID != 0 ]]; then + colorEcho ${RED} "当前非root账号(或没有root权限),无法继续操作,请更换root账号!" + colorEcho ${YELLOW} "使用sudo -命令获取临时root权限(执行后可能会提示输入root密码)" + exit 1 + fi +} + +FunctionStart() { + colorEcho ${PURPLE} ${SplitLine} + colorEcho ${PURPLE} ${SplitLine} + echo "" +} + +FunctionSuccess() { + colorEcho ${GREEN} ${SplitLine} + echo "" +} + +FunctionEnd() { + echo "" + colorEcho ${BlinkGreen} ${SplitLine} + echo "" + echo "" +} tmp () { gcloud compute instances create octopus-agent-2c-4g-1 --project=compact-lacing-371804 --zone=asia-northeast1-b --machine-type=n2d-custom-2-4096 --network-interface=network-tier=PREMIUM,subnet=default --metadata=startup-script=wget\ https://raw.githubusercontent.com/zeaslity/ProjectOctopus/main/source/src/main/java/io/wdd/source/shell/agent-bootup.sh\ \&\&\ chmod\ \+x\ agent-bootup.sh\ \&\&\ /bin/bash\ agent-bootup.sh --can-ip-forward --maintenance-policy=MIGRATE --provisioning-model=STANDARD --service-account=172889627951-compute@developer.gserviceaccount.com --scopes=https://www.googleapis.com/auth/devstorage.read_only,https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring.write,https://www.googleapis.com/auth/servicecontrol,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/trace.append --create-disk=auto-delete=yes,boot=yes,device-name=octopus-agent-2c-4g,image=projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20221213,mode=rw,size=20,type=projects/compact-lacing-371804/zones/us-west4-b/diskTypes/pd-ssd --no-shielded-secure-boot --shielded-vtpm --shielded-integrity-monitoring --reservation-affinity=any -gcloud compute instances delete octopus-agent-2c-4g-7 --project=compact-lacing-371804 --zone=asia-northeast1-b +gcloud compute instances delete tokyo-amd64-03 --project=compact-lacing-371804 --zone=asia-northeast1-b -gcloud compute instances create octopus-agent-2c-4g-7 --project=compact-lacing-371804 --zone=asia-northeast1-b --machine-type=n2d-custom-2-4096 --network-interface=network-tier=PREMIUM,subnet=default --can-ip-forward --maintenance-policy=MIGRATE --provisioning-model=STANDARD --service-account=172889627951-compute@developer.gserviceaccount.com --scopes=https://www.googleapis.com/auth/devstorage.read_only,https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring.write,https://www.googleapis.com/auth/servicecontrol,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/trace.append --create-disk=auto-delete=yes,boot=yes,device-name=octopus-agent-2c-4g,image=projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20221213,mode=rw,size=20,type=projects/compact-lacing-371804/zones/us-west4-b/diskTypes/pd-ssd --no-shielded-secure-boot --shielded-vtpm --shielded-integrity-monitoring --reservation-affinity=any +gcloud compute instances create tokyo-amd64-03 --project=compact-lacing-371804 --zone=asia-northeast1-b --machine-type=n2d-custom-2-4096 --network-interface=network-tier=PREMIUM,subnet=default --can-ip-forward --maintenance-policy=MIGRATE --provisioning-model=STANDARD --service-account=172889627951-compute@developer.gserviceaccount.com --scopes=https://www.googleapis.com/auth/devstorage.read_only,https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring.write,https://www.googleapis.com/auth/servicecontrol,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/trace.append --create-disk=auto-delete=yes,boot=yes,device-name=octopus-agent-2c-4g,image=projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20221213,mode=rw,size=20,type=projects/compact-lacing-371804/zones/us-west4-b/diskTypes/pd-ssd --no-shielded-secure-boot --shielded-vtpm --shielded-integrity-monitoring --reservation-affinity=any -gcloud compute ssh --zone "asia-northeast1-b" "octopus-agent-2c-4g-7" --project "compact-lacing-371804" +gcloud compute ssh --zone "asia-northeast1-b" "tokyo-amd64-03" --project "compact-lacing-371804" wget https://raw.githubusercontent.com/zeaslity/ProjectOctopus/main/source/src/main/java/io/wdd/source/shell/agent-bootup.sh && chmod +x agent-bootup.sh && /bin/bash agent-bootup.sh apt-cache madison openjdk-11-jdk | head -n 1 | awk '{print$3}' +java -jar /octopus-agent/agent.jar -Xms128m -Xmx512m -Dfile.encoding=utf-8 --spring.profiles.active=k3s --spring.cloud.nacos.config.group=k3s --spring.cloud.nacos.config.extension-configs[0].dataId=common-k3s.yaml --spring.cloud.nacos.config.extension-configs[0].group=k3s + }