Ansible github_packages

Есть два выпуска, которые можно получить из репозитория GitHub (двоичные выпуски и выпуски пакетов), как показано ниже:

GitHub SS

Я хочу использовать Ansible для получения выпусков пакетов из моего репозитория GitHub

Я поискал в документации Ansible и нашел коллекцию community.general.github_release, но это дает последние Release двоичные файлы репозитория, а не Package Releases.

Может ли кто-нибудь помочь, если он знает коллекцию, которая может получать выпуски пакетов с GitHub?

Ценю любую помощь. Спасибо


person Mervin Hemaraju    schedule 10.01.2021    source источник


Ответы (2)


Вы можете использовать Github GraphQL API (как показано в этот вопрос и этот), например:

  #
  # Tasks that may be included in an Ansible playbook or role depending on your needs
  #

  # Some variables to define to identify your repository
  # They may be set as playbook or role variables as well
  # You'll need a Bearer token (see https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token)
  - set_fact:
      bearer_token: YOUR_BEARER_TOKEN
      repository_name: repository-name
      repository_owner: repository-owner

  - name: Retrieve packages for repository
    uri:
      url: https://api.github.com/graphql
      method: POST
      body: '{"query":
          "query { repository(name: \"{{ repository_name }}\", owner: \"{{ repository_owner }}\") {
            packages(first:10) { nodes { name, packageType, latestVersion {
              version, files(first:100) { nodes { url } }
            } } }
          }
        }"'
      headers:
        Content-Type: application/json
        Accept: "application/vnd.github.packages-preview+json"
        Authorization: "bearer {{ bearer_token }}"
    register: github_packages_json

Это даст следующий результат:

  {
    "json": {
        "data": {
            "repository": {
                "packages": {
                    "nodes": [
                        {
                            "latestVersion": {
                                "files": {
                                    "nodes": [
                                        {
                                            "url": "https://pkg.githubusercontent.com/xxx/some-url"
                                        },
                                        {
                                            "url": "https://pkg.githubusercontent.com/xxx/another-url"
                                        }
                                    ]
                                },
                                "version": "my-package-1.2.3"
                            },
                            "name": "my-package",
                            "packageType": "DOCKER"
                        }
                    ]
                }
            }
        }
    },
}

В зависимости от packageType вам может потребоваться выполнить другое действие. Например, DOCKER packageType потребует, чтобы вы вытащили изображение, например:

  - name: pull docker
    shell: docker pull docker.pkg.github.com/{{ repository_owner | lower }}/{{ repository_name }}/{{ docker_image_name }}:{{ docker_image_version }}
    vars:
      docker_image_name: "{{ github_packages_json.json.data.repository.packages.nodes[0].name }}"
      docker_image_version: "{{ github_packages_json.json.data.repository.packages.nodes[0].latestVersion.version }}"

person Pierre B.    schedule 19.01.2021
comment
Подход graphQL действительно выглядит многообещающим (больше, чем мой ответ на основе API GitHub). Проголосовали. - person VonC; 19.01.2021
comment
@Pierre B. Спасибо, я протестирую это и дам вам знать. Это ANsible playbook, который вы предоставили, верно? - person Mervin Hemaraju; 19.01.2021
comment
Просто протестировал и работает как шарм! Спасибо вам большое за это. - person Mervin Hemaraju; 19.01.2021
comment
Спасибо @VonC и Мервин, добро пожаловать! Рад помочь. Это набор задач, который может быть включен в учебник или роль, я отредактирую, чтобы подчеркнуть, что - person Pierre B.; 19.01.2021

Ответственная роль community.general.github_release является частью кода ansible-collections/community.general.

Его исходный код person VonC    schedule 16.01.2021