Skip to content

Commit b8367b9

Browse files
author
yang.guo
authored
Merge pull request #202 from FlowCI/feature/161
Feature/161
2 parents fef098b + 623c0d6 commit b8367b9

File tree

19 files changed

+175
-64
lines changed

19 files changed

+175
-64
lines changed

platform-agent/src/test/java/com/flow/platform/agent/test/CmdManagerTest.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import com.flow.platform.domain.CmdResult;
2424
import com.flow.platform.domain.CmdStatus;
2525
import com.flow.platform.domain.CmdType;
26+
import com.google.common.collect.Lists;
2627
import java.io.IOException;
2728
import java.util.Map;
2829
import java.util.UUID;
@@ -119,19 +120,19 @@ public void onException(CmdResult result) {
119120
String content = String.format("source %s", resourcePath);
120121

121122
Cmd cmd1 = new Cmd("zone1", "agent1", CmdType.RUN_SHELL, content);
122-
cmd1.setOutputEnvFilter("FLOW_AGENT");
123+
cmd1.setOutputEnvFilter(Lists.newArrayList("FLOW_AGENT"));
123124
cmd1.setId(UUID.randomUUID().toString());
124125

125126
Cmd cmd2 = new Cmd("zone1", "agent1", CmdType.RUN_SHELL, content);
126-
cmd2.setOutputEnvFilter("FLOW_AGENT");
127+
cmd2.setOutputEnvFilter(Lists.newArrayList("FLOW_AGENT"));
127128
cmd2.setId(UUID.randomUUID().toString());
128129

129130
Cmd cmd3 = new Cmd("zone1", "agent1", CmdType.RUN_SHELL, content);
130-
cmd3.setOutputEnvFilter("FLOW_AGENT");
131+
cmd3.setOutputEnvFilter(Lists.newArrayList("FLOW_AGENT"));
131132
cmd3.setId(UUID.randomUUID().toString());
132133

133134
Cmd cmd4 = new Cmd("zone1", "agent1", CmdType.RUN_SHELL, content);
134-
cmd4.setOutputEnvFilter("FLOW_AGENT");
135+
cmd4.setOutputEnvFilter(Lists.newArrayList("FLOW_AGENT"));
135136
cmd4.setId(UUID.randomUUID().toString());
136137

137138
// when: execute four command by thread

platform-api/src/main/java/com/flow/platform/api/envs/EnvUtil.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,11 @@
2020
import com.flow.platform.domain.Cmd;
2121
import com.google.common.base.Strings;
2222
import java.util.Collection;
23+
import java.util.Collections;
2324
import java.util.HashMap;
2425
import java.util.HashSet;
26+
import java.util.LinkedList;
27+
import java.util.List;
2528
import java.util.Map;
2629
import java.util.Map.Entry;
2730
import java.util.Set;
@@ -31,6 +34,26 @@
3134
*/
3235
public class EnvUtil {
3336

37+
/**
38+
* Parse env format with comma like A,B,C to list
39+
* @return List instance
40+
*/
41+
public static List<String> parseCommaEnvToList(String input) {
42+
if (input == null) {
43+
return Collections.emptyList();
44+
}
45+
46+
String[] list = input.split(FlowEnvs.ENV_OUTPUT_SEPARATE);
47+
List<String> commaList = new LinkedList<>();
48+
for (String item : list) {
49+
if (Strings.isNullOrEmpty(item)) {
50+
continue;
51+
}
52+
commaList.add(item);
53+
}
54+
return commaList;
55+
}
56+
3457
/**
3558
* Convert "\n" to "\\n" in env variable, therefore the env variable still keep \n
3659
* @param source source env variables

platform-api/src/main/java/com/flow/platform/api/envs/FlowEnvs.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ public enum FlowEnvs implements EnvKey {
5858

5959
/**
6060
* Defined env variable output prefix
61+
*
62+
* Support multiple export, format ex: OUT_VAR_A,OUT_VAR_B,OUT_VAR_C
6163
*/
6264
FLOW_ENV_OUTPUT_PREFIX(false, true, null),
6365

@@ -71,6 +73,8 @@ public enum FlowEnvs implements EnvKey {
7173
*/
7274
FLOW_TASK_CRONTAB_BRANCH(false, false, null);
7375

76+
public final static String ENV_OUTPUT_SEPARATE = ",";
77+
7478
private boolean readonly;
7579

7680
private boolean editable;

platform-api/src/main/java/com/flow/platform/api/service/SyncServiceImpl.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import com.flow.platform.api.domain.sync.SyncRepo;
2222
import com.flow.platform.api.domain.sync.SyncTask;
2323
import com.flow.platform.api.domain.sync.SyncType;
24+
import com.flow.platform.api.envs.EnvUtil;
2425
import com.flow.platform.api.service.job.CmdService;
2526
import com.flow.platform.core.queue.PriorityMessage;
2627
import com.flow.platform.domain.Agent;
@@ -220,7 +221,7 @@ public void onCallback(Cmd cmd) {
220221
runShell.setWebhook(callbackUrl);
221222
runShell.setSessionId(cmd.getSessionId());
222223
runShell.setWorkingDir(DEFAULT_CMD_DIR);
223-
runShell.setOutputEnvFilter(SyncEvent.FLOW_SYNC_LIST);
224+
runShell.setOutputEnvFilter(EnvUtil.parseCommaEnvToList(SyncEvent.FLOW_SYNC_LIST));
224225
cmdService.sendCmd(runShell, false, 0);
225226
}
226227

platform-api/src/main/java/com/flow/platform/api/service/job/CmdServiceImpl.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import com.flow.platform.api.domain.job.Job;
2121
import com.flow.platform.api.domain.node.Node;
2222
import com.flow.platform.api.envs.AgentEnvs;
23+
import com.flow.platform.api.envs.EnvUtil;
2324
import com.flow.platform.api.envs.FlowEnvs;
2425
import com.flow.platform.api.util.PlatformURL;
2526
import com.flow.platform.core.exception.HttpException;
@@ -105,7 +106,10 @@ public CmdInfo runShell(Job job, Node node, String cmdId, EnvObject envVars) {
105106
CmdInfo cmdInfo = new CmdInfo(zone, null, CmdType.RUN_SHELL, node.getScript());
106107
cmdInfo.setInputs(envVars.getEnvs());
107108
cmdInfo.setWebhook(buildCmdWebhook(job));
108-
cmdInfo.setOutputEnvFilter(envVars.getEnv(FlowEnvs.FLOW_ENV_OUTPUT_PREFIX, "FLOW_OUTPUT"));
109+
110+
String outputFilter = envVars.getEnv(FlowEnvs.FLOW_ENV_OUTPUT_PREFIX, "FLOW_OUTPUT");
111+
cmdInfo.setOutputEnvFilter(EnvUtil.parseCommaEnvToList(outputFilter));
112+
109113
cmdInfo.setSessionId(job.getSessionId());
110114
cmdInfo.setExtra(node.getPath()); // use cmd.extra to keep node path info
111115
cmdInfo.setCustomizedId(cmdId);

platform-api/src/main/java/com/flow/platform/api/service/job/JobServiceImpl.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,7 @@ private Job createJob(String path, JobCategory eventType, Map<String, String> en
345345
}
346346

347347
/**
348-
* run node
348+
* Collect env variables and run node
349349
*
350350
* @param node job node's script and record cmdId and sync send http
351351
*/
@@ -371,7 +371,7 @@ private void run(Node node, Job job) {
371371
NodeResult rootResult = nodeResultService.find(tree.root().getPath(), job.getId());
372372
envVars.putAll(rootResult.getOutputs());
373373

374-
// pass last step noed status
374+
// pass last step node status
375375
Node prev = tree.prev(node.getPath());
376376
if (prev != null) {
377377
NodeResult prevResult = nodeResultService.find(prev.getPath(), job.getId());
@@ -380,6 +380,9 @@ private void run(Node node, Job job) {
380380
}
381381
}
382382

383+
// pass current node envs
384+
envVars.putAll(node.getEnvs());
385+
383386
// to run node with customized cmd id
384387
try {
385388
NodeResult nodeResult = nodeResultService.find(node.getPath(), job.getId());

platform-api/src/test/java/com/flow/platform/api/test/service/JobServiceTest.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,8 @@
1616

1717
package com.flow.platform.api.test.service;
1818

19-
import static com.github.tomakehurst.wiremock.client.WireMock.containing;
2019
import static com.github.tomakehurst.wiremock.client.WireMock.exactly;
2120
import static com.github.tomakehurst.wiremock.client.WireMock.matchingJsonPath;
22-
import static com.github.tomakehurst.wiremock.client.WireMock.moreThan;
2321
import static com.github.tomakehurst.wiremock.client.WireMock.moreThanOrExactly;
2422
import static com.github.tomakehurst.wiremock.client.WireMock.postRequestedFor;
2523
import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
@@ -44,7 +42,6 @@
4442
import com.flow.platform.domain.CmdStatus;
4543
import com.flow.platform.domain.CmdType;
4644
import com.flow.platform.queue.PlatformQueue;
47-
import com.github.tomakehurst.wiremock.client.CountMatchingStrategy;
4845
import com.google.common.collect.Lists;
4946
import java.io.IOException;
5047
import java.time.ZonedDateTime;

platform-api/src/test/java/com/flow/platform/api/test/util/EnvUtilTest.java

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import com.flow.platform.api.domain.node.Node;
2020
import com.flow.platform.api.envs.EnvUtil;
2121
import com.google.common.collect.Sets;
22+
import java.util.List;
2223
import org.junit.Assert;
2324
import org.junit.Before;
2425
import org.junit.Test;
@@ -44,13 +45,28 @@ public void init() {
4445
nodes[1] = target;
4546
}
4647

48+
@Test
49+
public void should_parse_comma_env_format() {
50+
List<String> emptyVar = EnvUtil.parseCommaEnvToList("");
51+
Assert.assertTrue(emptyVar.isEmpty());
52+
53+
List<String> singleVar = EnvUtil.parseCommaEnvToList("FIR_VAR");
54+
Assert.assertEquals(1, singleVar.size());
55+
56+
singleVar = EnvUtil.parseCommaEnvToList("FIR_VAR,");
57+
Assert.assertEquals(1, singleVar.size());
58+
59+
List<String> multipleVar = EnvUtil.parseCommaEnvToList("VAR_1,VAR_2,VAR_3,");
60+
Assert.assertEquals(3, multipleVar.size());
61+
}
62+
4763
@Test
4864
public void should_merge_env_without_overwrite() {
4965
// given:
5066
Node source = nodes[0];
5167
Node target = nodes[1];
5268

53-
// when: merget without overwrite
69+
// when: merge without overwrite
5470
EnvUtil.merge(source, target, false);
5571

5672
// then:
@@ -65,7 +81,7 @@ public void should_merge_env_with_overwrite() {
6581
Node source = nodes[0];
6682
Node target = nodes[1];
6783

68-
// when: merget without overwrite
84+
// when: merge without overwrite
6985
EnvUtil.merge(source, target, true);
7086

7187
// then:

platform-cmd-runner/src/main/java/com/flow/platform/cmd/App.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public static void main(String[] args) throws Throwable {
9393
logListener,
9494
inputs,
9595
null,
96-
"FLOW_", // find env start with FLOW_ and put to cmd result output map
96+
Lists.newArrayList("FLOW_"), // find env start with FLOW_ and put to cmd result output map
9797
null,
9898
Lists.newArrayList("sleep 20", "echo $FLOW_INPUT", "echo $PWD", "export FLOW_TEST=112233", "cd ~/"));
9999

0 commit comments

Comments
 (0)