我正在尝试让我们的一款非常简单的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 get
和flutter 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'
}
}
但仍然没有运气。