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

我目前正在为嵌入式平台自动创建SD图像。 我使用GitLab CI做了这个,特别是在Docker runner上。 它在我的系统本地工作,但是当它运行在GitLab CI,有奇怪的错误。

过程如下:

  • 我启动一个运行build.sh的Docker容器。
  • build.sh在安装的映像上执行chroot并运行provision.sh

细节

我先运行这样的docker:

 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时,我得到了以下消息(开始是build.shmd5sum检查:

 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正在工作。

我现在正在工作。 似乎这是gitlab运行器内的一些缓存问题。

Interesting Posts