Архив метки: devops

Gitlab — создать файл и обновить через API

Логика работы такая:

  • создаем файл в репозитории с нужным описанием
  • обновляем этот файл

Нужно создать создать ключ, заходим в пользовательские настройки, Access Tokens — пишем название, ставим нужны права и сохраняем, запомнив ключ.

Для начала нужно знать id проекта, его можно увидеть или в web-версии или выполнить запрос:

curl -GET -H 'Content-Type: application/json' --insecure --header 'PRIVATE-TOKEN: 123ABC' 'https://main-git.ru/api/v4/projects/Dima%2Fdima-tools'

В ответ придет Json, который будет будет содержать первый атрибут с именем id и номеров вашего проекта.

В Gitlab файл можно закачать как для использования в issue или merge request(в ответ придет markdown с ссылкой на файл для вставки). Запрос должен должен быть вот такой:

curl -i -k -H "PRIVATE-TOKEN: 123ABC" "https://main-git.ru/api/v4/projects/1/uploads" -X POST -F 'file=@testapi.txt'

В ответ придет вот такой ответ:
{"alt":"testapi.txt","url":"/uploads/1937f448b5468d4a76a50fdb40029829/testapi.txt","full_path":"/Dima/dima-tools/uploads/1937f448b5468d4a76a50fdb40029829/testapi.txt","markdown":"[testapi.txt](/uploads/1937f448b5468d4a76a50fdb40029829/testapi.txt)"}

Отсюда вот этот кусок :


[testapi.txt](/uploads/1937f448b5468d4a76a50fdb40029829/testapi.txt)

Его можно вставлять как markdown.

Второй вариант - это когда нам необходимо создать или обновить файл в нашем репозитории. Сначала создаем директорию app  и файл c именем main.c внутри нашего репозитория:

curl --insecure --request POST --header 'PRIVATE-TOKEN: 123ABC' --header "Content-Type: application/json" --data '{"branch": "master", "author_email": "author@example.com", "author_name": "Firstname Lastname", "content": "some content", "commit_message": "create a new file"}' "https://main-git.ru/api/v4/projects/1/repository/files/app%2Fmain%2Ec"

В ответ получаем Json:

{"file_path":"app/main.c","branch":"master"}

Далее если мы хотим обновить этот файл выполняем запрос:
curl --insecure --request PUT --header 'PRIVATE-TOKEN: 123ABC' --header "Content-Type: application/json" --data '{"branch": "master", "author_email": "author@example.com", "author_name": "Firstname Lastname","content": "some content new", "commit_message": "update file"}' "https://main-git.ru/api/v4/projects/1/repository/files/app%2Fmain%2Ec"

curl --insecure --request PUT --header 'PRIVATE-TOKEN: 123ABC' --header "Content-Type: application/json" --data '{"branch": "master", "author_email": "author@example.com", "author_name": "Firstname Lastname","content": "some content new", "commit_message": "update file"}' "https://main-git.ru/api/v4/projects/1/repository/files/app%2Fmain%2Ec"

В ответ придет Json, что обновление произведено. Если вы попытаетесь закачать уже существующий с таким именем файл - будет выдано сообщение, что такой файл уже существует и повторно не будет закачано. 

Таким образом можно использовать эту возможность даже в Bash напрямую из под Linux, не используя при этом общепринятые языки программирования. Можно переделать его, например, в PHP через Curl.