Как получить доступ к зависимости Maven из пакетов Github в рабочем процессе действий Github?

Моя сборка работает локально с использованием User + PAT (токена личного доступа) непосредственно в элементе pom.xml <repository>:

<repository>
    <id>github</id>
    <name>GitHub Packages</name>
    <url>https://[USER]:[PAT]@maven.pkg.github.com/myaccount/myrepo</url>
</repository>

Загружено с github: https: // [USER]: [PAT] @ maven.pkg.github.com / myaccount / myrepo / org / springframework / flex / spring-flex-core / 1.6.1.BUILD-SNAPSHOT / maven- metadata.xml (796 Б при 592 Б / с)

У меня нет settings.xml настроенных.

Однако он нарушает рабочий процесс Github Actions:

Предупреждение: не удалось передать метаданные org.springframework.flex: spring-flex-core: 1.6.1.BUILD-SNAPSHOT / maven-metadata.xml из / в github (*** maven.pkg.github.com/myaccount/myrepo ): Не удалось выполнить аутентификацию для https://maven.pkg.github.com/myaccount/myrepo/org/springframework/flex/spring-flex-core/1.6.1.BUILD-SNAPSHOT/maven-metadata.xml 401 неавторизовано

Не удалось собрать зависимости в org.springframework.flex: spring-flex-core: jar: 1.6.1.BUILD-SNAPSHOT: не удалось прочитать дескриптор артефакта для org.springframework.flex: spring-flex-core: jar: 1.6.1 .BUILD-SNAPSHOT

Мой рабочий процесс такой:

steps:
      - uses: actions/checkout@v2
      - name: Set up JDK 1.8
        uses: actions/setup-java@v1
        with:
          java-version: 1.8
      - name: Cache Maven packages
        uses: actions/cache@v2
        with:
          path: ~/.m2
          key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
          restore-keys: ${{ runner.os }}-m2
      - name: Build with Maven
        run: mvn -B package --file dev/server/pom.xml

Почему он не работает в рабочем процессе Github?


person ftkg    schedule 05.11.2020    source источник


Ответы (2)


Основываясь на вашем вопросе, я полагаю:

  • У вас есть проект maven, развернутый в GitHub Package, мы называем его library
  • У вас есть еще один проект maven, который использует пакет library в качестве зависимости в своем pom.xml, мы называем этот проект вашим app
  • Вы хотите добавить рабочий процесс автоматической сборки с использованием репозитория GitHub Actions в app

Если ваш library даже является общедоступным пакетом, в настоящее время, к сожалению, доза GitHub не поддерживает несанкционированный доступ из maven для общедоступных пакетов. Поэтому вам следует сделать следующее:

  1. Прежде всего, вам необходимо сгенерировать токен доступа PAT с доступом для чтения пакета в настройках вашего профиля в подразделе developer setting:  введите описание изображения здесь

  2. Перейдите в раздел настроек вашего репозитория app и в подразделе Secrets создайте два секрета среды с именем USER_NAME, значение которых содержит ваше имя пользователя GitHub (или имя пользователя владельца пакета library); и ACCESS_TOKEN указывают на значение токена PAT, созданного на предыдущем шаге.

  3. Теперь создайте maven settings.xml в репозитории app, например, вы можете создать его вместе со своим workflow.yml файлом. файл содержит:

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
    <activeProfiles>
        <activeProfile>github</activeProfile>
    </activeProfiles>
    <profiles>
        <profile>
            <id>github</id>
            <repositories>
                <repository>
                    <id>central</id>
                    <url>https://repo1.maven.org/maven2</url>
                </repository>
                <repository>
                    <id>github</id>
                    <url>https://maven.pkg.github.com/owner_username/package_name</url>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                    <releases>
                        <enabled>true</enabled>
                  </releases>
                </repository>
            </repositories>
        </profile>
    </profiles>

    <servers>
        <server>
            <id>github</id>
            <username>${env.USER_NAME}</username>
           <password>${env.ACCESS_TOKEN}</password>
        </server>
    </servers>

</settings>
  1. И, наконец, используйте этот файл настроек в рабочем процессе при запуске команды maven. например, файл workflow.yaml может содержать:
name: Java CI with Maven

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Set up JDK 8
      uses: actions/setup-java@v2
      with:
        java-version: '8'
        distribution: 'adopt'
        
    - name: Build with Maven
      run: mvn -s $GITHUB_WORKSPACE/.github/workflows/maven-settings.xml -B package --file pom.xml 
      env:
        USER_NAME: ${{ secrets.USER_NAME }}
        ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }}
person m.ghoreshi    schedule 05.05.2021

Вам нужно использовать GITHUB_TOKEN для действий. См. Здесь: https://docs.github.com/en/packages/guides/configuring-apache-maven-for-use-with-github-packages#authenticating-to-github-packages

Для аутентификации с использованием рабочего процесса GitHub Actions: для реестров пакетов (PACKAGE-REGISTRY.pkg.github.com) вы можете использовать GITHUB_TOKEN.

name: Java CI with Maven

on:
  push:
    branches: [ maven ]

jobs:
  build:

runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v2
- name: Set up JDK 1.8
  uses: actions/setup-java@v1
  with:
    java-version: 1.8
- name: Build core with Maven

...

- name: Publish package core
  run: mvn --batch-mode deploy --file myproject.core/pom.xml
  env:
       GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
person Tomer    schedule 21.01.2021
comment
У меня та же проблема, но я ничего не развертываю, просто пытаюсь получить доступ к репозиторию пакетов другого пользователя (общедоступного) с помощью Maven. AFAIK, для этого не требуется токен. Я ошибаюсь? - person kriegaex; 09.04.2021
comment
Да, я ошибся. OMG, в настоящее время GitHub не разрешает доступ для чтения к пакетам без аутентификации, с открытым исходным кодом или нет. О чем они думали? В любом случае, прочтите здесь. Пример можно найти здесь. Вам также может понадобиться этот кодировщик XML. - person kriegaex; 10.04.2021