Запустите apt-get в Docker образе в Azure конвейерах - PullRequest
1 голос
/ 29 января 2020

Недавно мое рабочее место перешло с CircleCI на Azure Pipelines, и поэтому мы перенесли все наши CI. Хотя большинство из них были довольно просты, этот конкретный конвейер требует выполнения нашей работы linux внутри образа docker. Вот что было в CircleCI:

build:
    docker:
      - image: electronuserland/builder:wine-03.18

    steps:
      - run: apt-get update
      - run: apt-get install -y libgnome-keyring-dev icnsutils graphicsmagick xz-utils rpm bsdtar
      - run: yarn install

      # run tests!
      - run: yarn test -- -u
      - run: yarn test -- --maxWorkers 2

      # Build the React app and the Electron app
      - run:
          name: yarn run electron-pack
            VERSION=$(node -p "var ipVer = require('./package.json').version; \
                                             var semVer = require('semver'); \
                                             var sprintf = require('sprintf-js').sprintf; \
                                             sprintf('%s.%s.%s%s', semVer.major(ipVer), semVer.minor(ipVer), semVer.patch(ipVer), '$ReleaseVAR');")
            yarn version --no-git-tag-version --new-version VERSION
            yarn run electron-pack

      # Move the packages into a separate directory
      - run: mkdir dist/packages
      - run: mv dist/*.exe dist/packages
      - run: mv dist/*.AppImage dist/packages
      - run: mv dist/*.deb dist/packages
      - run: mv dist/*.rpm dist/packages

А вот как это выглядит в настоящее время в Azure Конвейерах:

jobs:
  - job: Linux
    pool:
      name: 'Hosted Ubuntu 1604'
      vmImage: 'ubuntu-16.04'
    container:
      image: electronuserland/builder:wine-03.18
      options: --privileged

    steps:
      - task: NodeTool@0
        inputs:
          versionSpec: '8.x'
        displayName: 'Install Node.js'
      #- script: apt-get update
      #  displayName: apt-get update
      #- script: sudo apt-get install -y libgnome-keyring-dev icnsutils graphicsmagick xz-utils rpm bsdtar
      #  displayName: apt-get install
      #- script: sudo apt-get -f install
      #- script: sudo apt-get install -y wine
      - task: Npm@1
        inputs:
          command: 'install'
      - script: yarn test -- -u --coverage
        displayName: yarn -u
      - script: yarn test -- --maxWorkers 2 --coverage
        displayName: yarn maxWorkers 2

      - script: |
          VER=$(node -p "var ipVer = require('./package.json').version; \
                                                var semVer = require('semver'); \
                                                var sprintf = require('sprintf-js').sprintf; \
                                                sprintf('%s.%s.%s%s', semVer.major(ipVer), semVer.minor(ipVer), semVer.patch(ipVer), '$(Build.BuildNumber)');")
                yarn version --no-git-tag-version --new-version $(VER)
                yarn run electron-pack

Любая попытка запустить скрипт без 'apt- Строки get 'не выполняются во время последнего сценария, что приводит к ошибке : код выхода: ENOENT. spawn icns2png ENOENT ошибка. Попытка для запуска этих строк выдает ошибку

E: Could not open lock file /var/lib/dpkg/lock-frontend - open (13: Permission denied)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), are you root?]

, а попытка запустить sudo apt-get - ошибку

/__w/_temp/ac8e299a-ba1c-4e18-8baa-93d3f4a189e3.sh: line 1: sudo: command not found

. Но для установки sudo мне нужно иметь возможность запустить 'apt-get install sudo -y'

Это вызывает циклический цикл невозможности продолжения. Как я могу заставить команды apt-get работать внутри Azure конвейеров? Я должен отметить, что версия Ma c работала без каких-либо модификаций или изображения docker.

1 Ответ

1 голос
/ 29 января 2020

Как заставить команды apt-get работать внутри Azure конвейеров?

Похоже, это связано с docker изображениями. Как мы знаем, Docker изображения обычно не имеют sudo, мы всегда запускаем как root по умолчанию. В этом случае мы могли бы использовать команду apt-get напрямую.

Но это изображение выглядит как не root, поэтому для root -доступных вещей вы должны переключиться на root. В Dockerfile вы можете просто переключать идентификационные данные пользователя с помощью директивы USER; обычно по умолчанию используется root:

USER root

. Чтобы решить эту проблему, вам может потребоваться настроить изображение docker на основе image: electronuserland/builder:wine-03.18.

. Вы можете попробовать чтобы проверить эту ветку для получения более подробной информации.

Надеюсь, это поможет.

...