Gitlab API — создание, обновление файла на PHP

Ранее я писал как можно через curl в Linux выполнить запрос в Linux на создание файла или его обновление в репозитории Gitlab через его API. Ниже показано как это сделать через Curl, но уже в PHP.

Получить информацию по репозиторию:

<?php
$headers = ['PRIVATE-TOKEN: 123ABC'];

$url = 'https://main-git.ru/api/v4/projects/Dima/%2Fdima-tools';

$curl = curl_init();
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);                                                                                                                                        
curl_setopt($curl, CURLOPT_URL, $url);

$result = curl_exec($curl);
$info = curl_getinfo($curl);
curl_close($curl);

var_dump($info);
var_dump($result);

Создать файл в репозитории:


<?php

$json_array = array("branch" => "master", "author_email" => "dima@example.com", "author_name" => "Firstname Lastname", "content" => "some content", "commit_message" => "create a new file");

$JSON = json_encode($json_array);

$headers = array('PRIVATE-TOKEN: 123ABC', 'Content-Type: application/json');
$url = 'https://main-git.ru/api/v4/projects/1/repository/files/app%2Fmain';

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($curl, CURLOPT_POSTFIELDS, $JSON);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);                                                                                                                                               
$result = curl_exec($curl);
$info = curl_getinfo($curl);
curl_close($curl);

Обновить файл в репозитории, при этом наполнить его содержимым из другого файла (create json array from file in php):


<?php

//читаем файл в строку, в файле должны быть переводы строк "\n" если хотите, чтобы в  //Gitlab была не одна строка без переносов
$hosts = file_get_contents('./file/hosts.txt');

$json_array = array("branch" => "master", "author_email" => "dima@russia.ru", "author_name" => "Red Dima", "content" => $hosts, "commit_message" => "update file");

$JSON = json_encode($json_array);

$headers = array('PRIVATE-TOKEN: 123ABC', 'Content-Type: application/json');
$url = 'https://main-git.msk.ru/api/v4/projects/1/repository/files/ansible%2Fhosts';

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($curl, CURLOPT_POSTFIELDS, $JSON);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);                                                                                                                                               
$result = curl_exec($curl);
$info = curl_getinfo($curl);
curl_close($curl);

var_dump($info);
var_dump($result);

Добавить комментарий