Некоторое время назад я хотел разработать интерфейс, чтобы потянуть файлы из GitLab / Github через веб -ook и загрузить указанный OS, поэтому я нашел официальные документы GitHub и Gitlab.
Конечно, официальные документы слишком длинные, особенно версия GitLab, созданная компанией, может быть несовместимой, поэтому вы можете только посмотреть информацию о документе, предоставленную построенным GitLab.В случае возникновения некоторых проблем вам необходимо проверить версию.
Конечно, к счастью, кроме версии интерфейса, крупных ям нет. Если возникнут проблемы, можно и по версии проверить. Можно сказать, что это однозначно преимущество строгого следования RESTful API, который и GitHub и GitLab показали себя очень хорошо.
Поскольку GitLab и GitHub используют два набора интерфейсов, здесь они представлены отдельно, но методы одинаковы:
Извлеките сжатый пакет, распакуйте его и загрузите файл. Другой способgit clone
вниз, но чувствуюgit clone
Это все еще было слишком много проблем, поэтому я решил потянуть сжатый пакет.
GitLab
Интерфейс для загрузки сжатого пакета:docs.git lab.com/ohoh/api/repo…
Здесь есть два параметра:
id (required) - The ID or URL-encoded path of the project owned by the authenticated user
sha (optional) - The commit SHA to download defaults to the tip of the default branch
Здесь необходимы две части информации, id и sha проекта, обе из которых можно получить через Webhook:
const { checkout_sha: checkoutSha, project_id: projectId } = body
Но разница в том, что id помещается в параметр (param), а sha передается в виде строки запроса (GitHub отличается от него), если sha не передается, по умолчанию используется последний код ветки master .
Конечно, мы также установим секретный токен, доступ к которому можно получить через заголовокx-gitlab-token
получать.
Затем мы получили актуальную информацию о GitLab.
Если контент, полученный в API, требует разрешения, вы можете использоватьPRIVATE-TOKEN
Этот заголовок передается в токен.
GitHub
Интерфейс GitHub Webhook немного отличается от GitLab, здесь мы по-прежнему используем версию V3 интерфейса Restful.
Самая важная вещь в веб-перехватчике GitHub — это то, как вычислить секретный токен, чтобы он соответствовал тому, что мы изначально установили. GitHub не так прост, как GitLab, нам нужно сначала сделать некоторые расчеты, которые можно увидеть в деталях.Validating payloads from GitHub, не имеет значения, если вы не понимаете Ruby, вот кусок JavaScript:
const strBody = JSON.stringify(body); // 将整个 body 带出去变成 string
const sign = crypto.createHmac("sha1", secretKey) // secretKey 为你需要核对的 token
.update(strBody)
.digest("hex"); // 加密成十六进制
ctx.assert(ctx.header["x-hub-signature"].replace("sha1=", "") === sign, 403, "Wrong Sign");
Затем поместите заголовокx-hub-signature
с участиемsha1=value
значение в иsign
Просто сделайте сравнение.
Во-вторых, GitHub должен передать заголовокx-github-event
Чтобы судить о типе события, иначе будет ошибка, содержимое разных событий может быть разным, нужно сделать какую-то специальную обработку для пинга, если это пинг, вернуть 200 напрямую, чтобы можно было пройти проверку GitHub .
Из тела запроса вы также можете найти информацию о репозитории и соответствующую информацию о фиксации, а также вы можете получить информацию об организации репозитория (здесь нам не нужна организация репозитория, поэтому мы не будем ее описывать сейчас)
const { repository, head, head_commit: headCommit } = body;
Нужный нам интерфейс:
https://github.com/${org}/${repositoryName}/archive/${sha}.zip
в:
repositoryName = repository.name
sha = headCommit.id
Среди них, если требуется авторизация, напишите в шапке:
"Authorization": `token ${TOKEN}`