---
title: "【Jenkins】各种语言、程序之间的沟通"
author: "Perrin Yong"
author_profile: https://www.pystone.net/profile/
published_by: "Perrin Yong"
canonical: https://www.pystone.net/notes/jenkins-cross-language-integration/
type: note
content_role: unspecified
visibility: public
id_stability: rename-stable
source_path: "10-计算机、信息技术与工程/03-软件工程与质量保障/CI-CD与质量保障/CI-CD工具链/【Jenkins】各种语言、程序之间的沟通.md"
content_hash: 273b2d851c82203fab70176eb4d12aabb4454892c24baab922752caeb7afb1c7
knowledge_version: 224c990773de.5fa8af6e39fa
site_commit: 224c990773de166d23a886306577dd90379529ce
notes_commit: 5fa8af6e39fa3891d1b9b4832bfa6c4e0ecaaf0a
---
# 【Jenkins】各种语言、程序之间的沟通

﻿# 【Jenkins】各种语言、程序之间的沟通

> 创建时间：2021/4/13 17:21

* 关于环境变量
    * bat脚本环境变量
    * Pipeline环境变量
    * 不同位置环境变量的交互
  * 关于Exit
    * C# Exit以
      * C# Exit方法
      * bat脚本处理执行结果
    * bat Exit
      * Jenkins Pipeline中

## 关于环境变量

JenkinsPipeline中涉及到Pipeline script与bat脚本、shell脚本之间的互相调用，而不同脚本环境变量使用的语法规则不同，环境变量的作用范围也不同，导致不同的阶段用不同的方式设置、修改环境变量会有一些坑点。

### bat脚本环境变量

```csharp
string a = &quot;test&quot;;
string tmp = &quot;est&quot;;
string b = &quot;t&quot; + tmp;
Console.WriteLine(string .ReferenceEquals(str1, str2));

```

### Pipeline环境变量

```csharp
string a = &quot;test&quot;;
string tmp = &quot;est&quot;;
string b = &quot;t&quot; + tmp;
Console.WriteLine(string .ReferenceEquals(str1, str2));

```

Pipeline代码中使用

```csharp
string a = &quot;test&quot;;
string tmp = &quot;est&quot;;
string b = &quot;t&quot; + tmp;
Console.WriteLine(string .ReferenceEquals(str1, str2));

```

sh中使用

```csharp
string a = &quot;test&quot;;
string tmp = &quot;est&quot;;
string b = &quot;t&quot; + tmp;
Console.WriteLine(string .ReferenceEquals(str1, str2));

```

bat中使用

```csharp
string a = &quot;test&quot;;
string tmp = &quot;est&quot;;
string b = &quot;t&quot; + tmp;
Console.WriteLine(string .ReferenceEquals(str1, str2));

```

### 不同位置环境变量的交互

## 关于Exit

### C# Exit以

#### C# Exit方法

```csharp
string a = &quot;test&quot;;
string tmp = &quot;est&quot;;
string b = &quot;t&quot; + tmp;
Console.WriteLine(string .ReferenceEquals(str1, str2));

```
```csharp
string a = &quot;test&quot;;
string tmp = &quot;est&quot;;
string b = &quot;t&quot; + tmp;
Console.WriteLine(string .ReferenceEquals(str1, str2));

```

Terminates this process **immediately** and returns an exit code to the operating system.
Use **0** (zero) to indicate that the process completed **successfully**.

```csharp
string a = &quot;test&quot;;
string tmp = &quot;est&quot;;
string b = &quot;t&quot; + tmp;
Console.WriteLine(string .ReferenceEquals(str1, str2));

```

#### bat脚本处理执行结果

```csharp
string a = &quot;test&quot;;
string tmp = &quot;est&quot;;
string b = &quot;t&quot; + tmp;
Console.WriteLine(string .ReferenceEquals(str1, str2));

```
```csharp
string a = &quot;test&quot;;
string tmp = &quot;est&quot;;
string b = &quot;t&quot; + tmp;
Console.WriteLine(string .ReferenceEquals(str1, str2));

```

### bat Exit

在CMD中调用 `exit n`，会直接退出cmd

```csharp
string a = &quot;test&quot;;
string tmp = &quot;est&quot;;
string b = &quot;t&quot; + tmp;
Console.WriteLine(string .ReferenceEquals(str1, str2));

```

#### Jenkins Pipeline中

在Jenkins Pipeline中的bat脚本中

  * `exit 0` \- 表示该脚本正常结束，继续后面的步骤
  * `exit 1` \- 错误退出，该阶段会爆红，流水线中止


若将returnStatus设置为true，可以获取该脚本的返回状态，在`exit 1`的情况下也不会中止流水线。

**shell 出错后继续，取 shell 输出值。**

```csharp
string a = &quot;test&quot;;
string tmp = &quot;est&quot;;
string b = &quot;t&quot; + tmp;
Console.WriteLine(string .ReferenceEquals(str1, str2));

```
```csharp
string a = &quot;test&quot;;
string tmp = &quot;est&quot;;
string b = &quot;t&quot; + tmp;
Console.WriteLine(string .ReferenceEquals(str1, str2));

```
