【问题标题】:Webservice call from Jenkins来自 Jenkins 的 Web 服务调用
【发布时间】:2021-02-10 17:37:04
【问题描述】:

我需要编写一个 web 服务客户端并从 Jenkins 调用它。以下是我的问题:

  • 从 Jenkins 调用 Web 服务的最佳方式是什么?有没有可用的默认插件?我需要将 XML 数据作为输入传递给 Web 服务。
  • 如果插件不是选项,请告诉我我们可以通过哪些其他方式实现此目的(ANT+JAVA 等)?
  • 如果您有任何示例代码,那就太好了。

谢谢 阿拉文

【问题讨论】:

标签: web-services jenkins


【解决方案1】:

很高兴知道您只需要调用您的客户端作为某些复杂流程的一部分,作为 Jenkins 作业实施,或者您想专注于 Web 服务测试。

WillieT 为您指出了几个可用于解决一些基本任务的简单食谱。如果您需要更强大的功能、更好的报告功能,请考虑以下一些附加功能:

Apache JMeter (details)

JMeter 可以使用Performance plugin 集成到 Jenkins 中。报告示例:

研磨机 (details)

我更喜欢使用这个工具,但它可能对你来说很复杂/繁重。

Grinder 可以使用Grinder plugin 集成到 Jenkins 中。报告示例:

【讨论】:

  • 感谢 Renat 和 Willie。我的主要问题是从 Jenkins 调用 Web 服务,而不是性能。我看到了威利的帖子。但是,我需要将复杂的输入 XML 数据作为输入从 Jenkins 传递给 Web 服务。在从变量形成 XML 数据并将其作为输入传递给 Web 服务时需要帮助。
  • JMeter 提供了一种非常简单的方法来做到这一点,但您可以使用纯 shell 解决方案。 CURL 允许您发送包含所有必需数据的请求。它将如下所示: curl -X POST -H 'Content-type: text/xml' -d "Some ${JOB_NAME} string" "http://..." 请注意 ${JOB_NAME} 在这样的方式您可以提供所有必需的参数。如果您需要更复杂的 XML 生成——创建一个 shell 脚本并使用 bash 生成 XML(您可以使用一些技巧,例如模板 - stackoverflow.com/a/14032753/1435741)。
  • 谢谢雷纳特。感谢您的宝贵时间。
【解决方案2】:

如果您开发插件,例如扩展 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 环境之外的基本休息 url。在您的插件代码中的任何地方,您都可以根据需要简单地调用它:

String rsData = RestClient.query("/project_type");

假设完整的 REST Web 服务 url 是

http://localhost:8090/rest/project_type    

您也可以使用Apache HttpClient,或OkHttp

【讨论】:

    【解决方案3】:

    我使用了“HTTP 请求”插件。这个插件适用于 REST 和 SOAP api。 在此处输入图像描述 插件图片

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-24
      • 1970-01-01
      • 1970-01-01
      • 2012-06-14
      • 2011-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多