Docker runner chroot在gitlab-ci-docker-runner中不起作用

时间:2017-07-25 11:43:19

标签: docker gitlab-ci gitlab-ci-runner

我目前正在自动化为嵌入式平台创建SD映像的过程。我这样做是使用GitLab CI,尤其是Docker runner。它在我的系统本地工作,但当它在GitLab CI中运行时,会出现奇怪的错误。

以下是流程:

  • 我启动了一个Docker容器,它运行build.sh
  • build.sh在已装载的图片上执行chroot并运行provision.sh

详细

我首先像这样运行码头:

docker run --rm -it --privileged=true -v `pwd`:"/wd" -w="/wd" ubuntu:xenial-20170710 /bin/bash build.sh

文件build.sh如下所示:

apt-get update
apt-get install qemu-user-static pixz -y
pixz -d ubuntu-16.04.2-minimal-odroid-xu4-20170516.img.xz ubuntu-    16.04.2-minimal-odroid-xu4-20170516.img
md5sum -c ubuntu-16.04.2-minimal-odroid-xu4-20170516.img.md5
limits=$(sfdisk -l --bytes ubuntu-16.04.2-minimal-odroid-xu4-20170516.img | tail -n 1)
loopdev=$(losetup -f --show -o $((512 * $(awk '{print $2}' <<< "$limits"))) --sizelimit $(awk '{print $5}' <<< "$limits") ubuntu-16.04.2-minimal-odroid-xu4-20170516.img)

mkdir /mnt/rna
mount $loopdev /mnt/rna
mount -t proc proc /mnt/rna/proc/
mount -t sysfs sys /mnt/rna/sys/
mount -o bind /dev /mnt/rna/dev/
echo 'nameserver 8.8.4.4' >> /mnt/rna/etc/resolv.conf

cp $(which qemu-arm-static) /mnt/rna/usr/bin
cp provision.sh /mnt/rna/root
chroot /mnt/rna qemu-arm-static /bin/bash -l /root/provision.sh

mv ubuntu-16.04.2-minimal-odroid-xu4-20170516.img rna.img
pixz rna.img rna.img.xz

losetup -d $loopdev

如果您对图片感兴趣,可以在此处找到:https://odroid.in/ubuntu_16.04lts/ubuntu-16.04.2-minimal-odroid-xu4-20170516.img.xz

provision.sh执行以下操作:

pwd
env
ls -la

apt-get update
apt-get install tmux -y

问题

在本地,一切正常,apt-get安装在图像中运行。

.gitlab-ci.yml如下所示:

image: ubuntu:xenial-20170710

build:
  tags:
    - privileged
  artifacts:
    expire_in: "1h"
    paths:
      - rna.img.xz
  script:
    - ./build.sh

但是当我运行这个GitLab CI时,我收到以下消息(开始是md5sum内的build.sh检查:

ubuntu-16.04.2-minimal-odroid-xu4-20170516.img: OK
ubuntu-16.04.2-minimal-odroid-xu4-20170516.img.xz: OK
/root/.profile: line 9: /usr/bin/mesg: No such file or directory
/
/root/provision.sh: line 2: /usr/bin/env: No such file or directory
/root/provision.sh: line 3: /bin/ls: No such file or directory
/root/provision.sh: line 5: /usr/bin/apt-get: No such file or directory
/root/provision.sh: line 6: /usr/bin/apt-get: No such file or directory

docker-runner以privileged模式运行,以确保chrootmount正常运行。

1 个答案:

答案 0 :(得分:0)

我现在就开始工作了。似乎这是gitlab-runner中的一些缓存问题。