Введение в Jenkins Common REST API (клиент Java)

Jenkins

jenkinsLogo

задний план

Jenkins является незаменимым инструментом для построения проекта и непрерывного развертывания.Как использовать программы или скрипты для управления процессом построения становится содержанием этой статьи.

По умолчанию после установки Jenkins/apiНиже пути для справки приведены некоторые основные сведения об API, но они не очень интуитивно понятны, а интерфейс API не указан.

Клиент jenkins-java, используемый в этой статье:

<dependency>
	<groupId>com.offbytwo.jenkins</groupId>
	<artifactId>jenkins-client</artifactId>
	<version>0.3.7</version>
</dependency>

Предположим, адрес развертывания jenkins:http://localhost:8080

API, использованные в этой статье:

название API
Создать задание POST http://localhost:8080/createItem/api/json?name=xxx
Обновление задания POST http://localhost:8080/job/{job_name}/config.xml/api/json
найти работу GET http://localhost:8080/job/{job_name}/api/json
Получить JobXml GET http://localhost:8080/job/{job_name}/config.xml/api/json
Создать сборку POST http://localhost:8080/job/{job_name}/build/api/json
Получить элемент очереди GET http://localhost:8080/queue/item/17/api/json
Получить информацию о сборке GET http://localhost:8080/job/test/6/api/json
Получить журнал TXT GET http://localhost:8080/job/test/{build_number}/logText/progressiveText/api/json
Получить HTML-журнал GET http://localhost:8080/job/test/{build_number}/logText/progressiveHtml/api/json

Создать вакансию API

Конфигурации Jenkins приземляются на формате XML, поэтому они на самом деле в форме конфигурации XML.

POST http://localhost:8080/createItem/api/json?name=xxx

Файл config.xml, необходимый для создания, также передается на сервер вместе с запросом, и создание может быть успешным.

Как узнать, как должен быть написан config.xml?

  • Вы можете назвать его в день, чтобы создать проект, нуждающийся в Jenkins, то после завершения редактирования рабочий каталог на следующий Jenkins находит работу / {job_name} /config.xml с ним, чтобы написать шаблон, который вам нужен в качестве шаблона Отказ
  • Получите это, получив XML API
GET http://localhost:8080/job/{job_name}/config.xml/api/json

Java Client

jenkinsServer.createJob("auto_test_job", replacedText, true);
String xml = jenkinsServer.getJobXml("auto_test_job");

Изменить API задания

Изменение задания также является изменением файла xml.

POST http://localhost:8080/job/{job_name}/config.xml/api/json

Содержимое config.xml передается в тело, а для contentType устанавливается значениеtext/xml

Java Client

 jenkinsServer.updateJob("auto_test_job", replacedText, true);

API сборки

Получить работу по названию работы

GET http://localhost:8080/job/{job_name}/api/json 

новая сборка

POST http://localhost:8080/job/{job_name}/build/api/json 

После того, как отправка на сервер прошла успешно, он возвращает что-то похожее на идентификатор очереди, потому что это асинхронная сборка, поэтому, чтобы получить статус сборки, вам нужно использовать этот идентификатор очереди, чтобы пройти дальше. Например:

 $ curl -v  -XPOST http://localhost:8080/job/test/build/api/json
*   Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8080 (#0)
> POST /job/test/build/api/json HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 201 Created
< Date: Sat, 05 Jan 2019 08:33:45 GMT
< X-Content-Type-Options: nosniff
< Location: http://localhost:8080/queue/item/17/
< Content-Length: 0
< Server: Jetty(9.4.z-SNAPSHOT)
<
* Connection #0 to host localhost left intact

вышеLocation: http://localhost:8080/queue/item/17/Это возвращаемая информация об очереди, и от этого зависит последующее получение queueItem.

Получить QueueItem по QueueId

GET http://localhost:8080/queue/item/17/api/json 

Пример

$ curl  http://localhost:8080/queue/item/17/api/json\?pretty\=true
{
  "_class" : "hudson.model.Queue$LeftItem",
  "actions" : [
    {
      "_class" : "hudson.model.CauseAction",
      "causes" : [
        {
          "_class" : "hudson.model.Cause$UserIdCause",
          "shortDescription" : "由用户 anonymous 启动",
          "userId" : null,
          "userName" : "anonymous"
        }
      ]
    }
  ],
  "blocked" : false,
  "buildable" : false,
  "id" : 17,
  "inQueueSince" : 1546677225670,
  "params" : "",
  "stuck" : false,
  "task" : {
    "_class" : "hudson.maven.MavenModuleSet",
    "name" : "test",
    "url" : "http://localhost:8080/job/test/",
    "color" : "blue"
  },
  "url" : "queue/item/17/",
  "why" : null,
  "cancelled" : false,
  "executable" : {
    "_class" : "hudson.maven.MavenModuleSetBuild",
    "number" : 6,
    "url" : "http://localhost:8080/job/test/6/"
  }
}

Я знаю объект QueueItem в полученном объекте QueueItem. Есть ли критический параметр, по которому этот элемент выполняется при сборке?executable,еслиexecutableЕсли он не пуст, значит, jenkins уже собирает эту задачу, номер сборкиnumber, это число, которое мы видим на странице jenkins. Вы можете передатьurlЗначение поля открывается в браузере.

Получить сведения о сборке

Теперь, когда сборка началась, мы можем получить подробности сборки.

curl http://localhost:8080/job/test/6/api/json\?pretty\=true
{
  ...
  "building" : false,
  "description" : null,
  "displayName" : "#6",
  "duration" : 13631,
  "estimatedDuration" : 17999,
  "executor" : null,
  "fullDisplayName" : "test #6",
  "id" : "6",
  "keepLog" : false,
  "number" : 6,
  "queueId" : 17,
  "result" : "SUCCESS",
  "timestamp" : 1546677234794,
  "url" : "http://localhost:8080/job/test/6/",
  "builtOn" : "",
 ...
}

Из возвращенных результатов вы можете увидеть, стоит ли оно настроить:"building" : false,, если конечное состояние сборки:"result" : "SUCCESS",

Получить журнал сборки

текст:

GET http://localhost:8080/job/test/{build_number}/logText/progressiveText/api/json

html

GET http://localhost:8080/job/test/{build_number}/logText/progressiveHtml/api/json

Java Client


JobWithDetails job = jenkinsServer.getJob(jenkinsJob);
...
 QueueReference reference = job.build( true);
...
QueueItem queueItem = jenkinsServer.getQueueItem(new QueueReference(queuePart));
...
Build build = jenkinsServer.getBuild(queueItem);
...
BuildWithDetails details = build.details();
BuildResult result = details.getResult();
...
String logs =  details.getConsoleOutputText();