Я пытаюсь создать webrtc, используя действия github с контейнером Docker Ubuntu. И получать кучу tar: ./usr/lib/i386-linux-gnu/libicui18n.so.67.1: Cannot change ownership to uid 376730, gid 89939: Invalid argument
лайков сообщений во время процесса выборки webrtc. Я нашел возможное решение с параметром --no-same-owner
tar, но не могу понять, как заставить tar использовать его для каждого файла .tar, который webrtc fetch хочет обработать.
Рабочий процесс:
name: Build
jobs:
build:
strategy:
fail-fast: false
matrix:
include:
- os: Linux
container: ghcr.io/<company>/<name>
...
name: ${{matrix.os}}, ${{matrix.arch}}
runs-on: [ "self-hosted", ...]
container: ${{ matrix.container }}
steps:
- uses: actions/checkout@v3
- name: Build WebRTC
if: ${{matrix.os == 'Linux'}}
shell: bash
run: |
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git depot_tools
export PATH=$(pwd)/depot_tools:$PATH
mkdir webrtc_build
cd webrtc_build
fetch --nohooks webrtc && gclient sync
...
И Докерфайл:
FROM ubuntu:22.04
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && \
apt-get install -y sudo clang build-essential cmake git libssl-dev curl python3 && \
...
rm -rf /var/lib/apt/lists/*
Рабочий процесс публикации Docker:
on:
...
jobs:
push:
runs-on: [self-hosted, ...]
steps:
- uses: actions/checkout@v2
- name: Build image
run: docker build . --file Dockerfile --tag <name> --label "runnumber=${GITHUB_RUN_ID}"
....
- name: Push image
run: |
docker tag <name> ghcr.io/<company>/<name>
docker push ghcr.io/<company>/<name>
Спасибо! Вы пытались построить его без контейнера?
@Азим. Да, это работает нормально. Но, к сожалению, я должен использовать контейнер
Верно. Это пользовательский Dockerfile, который вы используете? Где он используется в вашем рабочем процессе?
@Azeem, есть еще один рабочий процесс, который публикует образ докера в github. И использую его по ссылке в разделе container
основного рабочего процесса. Я также добавил это к основному вопросу
Понятно. Вы пытались добавить USER root
в Dockerfile?
@Azeem, это уже корень. id
дает uid=0(root) gid=0(root) groups=0(root)
Верно. По умолчанию должно быть, если не указано иное. Я задавался вопросом о uid 376730, gid 89939
и подумал, может быть, это связано с этим.
@Azeem, я думаю, это связано с этим ... Я пытался создать и установить пользователя в файле Docker, но это приводит к ошибкам после запуска рабочего процесса gh. Я также пытался установить пользователя на шаге Build WebRTC
(su user
, который не проходит без ошибок), но id
все равно дает uid=0(root)...
. С другой стороны, я загрузил этот образ на свой ноутбук, запустил его, сменил пользователя, и он работает локально.
Итак, настройка пользователя вручную работает нормально?
Также смотрите jobs.<job_id>.container.options и --user / -u.
@Azeem, «Итак, настройка пользователя вручную работает нормально?» - Я имею в виду, что это работает только локально. Как правило, выборка webrtc также отлично работает локально. Но это не работает для действий gh.
Исправлено добавлением переменной окружения TAR_OPTIONS
:
env:
TAR_OPTIONS: --no-same-owner
Пожалуйста, включите свой минимальный рабочий процесс в свой вопрос, чтобы воспроизвести это. Спасибо!