задний план
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();