詹金斯(Jenkins)中的Docker容器颤动失败,但本地失败

时间:2018-10-09 08:05:33

标签: docker jenkins flutter

我正在尝试让我们的一款非常简单的Flutter应用程序之一在Jenkins中运行其测试套件。

我有以下Dockerfile:

FROM ubuntu:bionic

ARG WORKING_DIR=${HOME}
ARG FLUTTER_ARCHIVE=flutter_linux_v0.5.1-beta.tar.xz

COPY ${FLUTTER_ARCHIVE} ${WORKING_DIR}

RUN apt-get update
RUN apt-get -y install xz-utils

RUN tar -xf "${WORKING_DIR}/${FLUTTER_ARCHIVE}" 
ENV PATH="${WORKING_DIR}/flutter/bin:${PATH}"

RUN apt-get -y install git libglu1 lib32stdc++6

RUN rm ${WORKING_DIR}/${FLUTTER_ARCHIVE}

我在机器上构建容器,导航到flutter应用程序的源代码目录,然后运行以下命令:

docker run -td -v密码:/source flutter:flutter

flutter:flutter是我的内置图片。

我使用docker exec导航到容器中,依次执行flutter packages getflutter test。一切正常,所有测试通过。

但是,当我尝试通过Jenkins使用完全相同的Dockerfile时,出现以下错误:

  

/ flutter / bin / flutter:第161行:/ flutter / bin / cache / dart-sdk / bin / dart:权限被拒绝

我猜测它与用户有关,并且在Jenkins的运行方式和手动运行步骤时的运行方式之间有所不同。 Jenkinsfile中的步骤与我上面手动运行的完全相同:

stages {
    stage('test') {
        steps {
            script {
                sh 'flutter packages get'
                sh 'flutter test'
            }
        }
    }
}

我已经指出了映像所在的本地注册表:

agent {
    docker "flutter:flutter"
}

我没有主意,我真的不知道如何解决此错误。任何帮助将不胜感激。

更新

我尝试了以下方法:

  • 使用useradd在Dockerfile中创建一个用户,然后使用USER <user> Dockerfile语法切换到该用户并以该用户身份执行所有操作。
  • 使用useradd在Dockerfile中创建用户,以root用户身份执行所有操作,然后设置chown user:user -R /flutter来更改Flutter目录的所有权

以上两项均要求我将以下内容添加到Jenkinsfile中:

agent {
    docker {
        image 'flutter:flutter'
        args '-u user --privileged'
    }
}

但仍然没有运气。

0 个答案:

没有答案