我需要编写一个 web 服务客户端并从 Jenkins 调用它。以下是我的问题:
- 从 Jenkins 调用 Web 服务的最佳方式是什么?有没有可用的默认插件?我需要将 XML 数据作为输入传递给 Web 服务。
- 如果插件不是选项,请告诉我我们可以实现此目的的其他方法是什么(ANT + JAVA 等)?
- 如果您有任何示例代码,那就太好了。
谢谢阿拉文德
我需要编写一个 web 服务客户端并从 Jenkins 调用它。以下是我的问题:
谢谢阿拉文德
很高兴知道您只需要调用您的客户端作为某些复杂流程的一部分,作为 Jenkins 作业实现,或者您想专注于 Web 服务测试。
WillieT 为您指出了几个可用于解决一些基本任务的简单方法。如果您需要更多功能、更好的报告、一些附加功能,请考虑以下内容:
Apache JMeter(详情)
JMeter 可以使用Performance plugin集成到 Jenkins 中。报告示例:
磨床(详情)
我更喜欢使用这个工具,但它可能对你来说很复杂/繁重。
Grinder 可以使用Grinder 插件集成到 Jenkins 中。报告示例:
如果您开发插件,例如扩展 hudson.tasks.Builder,请在 pom.xml 中为 JAX-RS 客户端包含以下内容:
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.25.1</version>
</dependency>
一个示例 JAX-RS 客户端:
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriBuilder;
import org.glassfish.jersey.client.ClientConfig;
public class RestClient {
private static String BASE_URL = "http://localhost:8090/rest";
private static String ACCESS_TOKEN = "8900***bc1";
public static String query(String path) {
ClientConfig config = new ClientConfig();
Client client = ClientBuilder.newClient(config);
WebTarget target = client.target(getBaseURI());
// token authentication
String result = target.path(path).request().header("Authorization", "Token " + ACCESS_TOKEN)
.accept(MediaType.APPLICATION_JSON).get(String.class);
return result;
}
private static URI getBaseURI() {
return UriBuilder.fromUri(BASE_URL).build();
}
}
其中http://localhost:8090/rest是 Jenkins 环境之外的基本 rest url。在插件代码的任何地方,您都可以根据需要简单地调用它:
String rsData = RestClient.query("/project_type");
假设完整的 REST Web 服务 URL 是
http://localhost:8090/rest/project_type
您也可以使用Apache HttpClient或OkHttp