2017-07-25 90 views
0

我目前正在自動化爲嵌入式平臺創建SD圖像的過程。我使用GitLab CI進行此操作,特別是使用Docker runner。它在我的系統本地工作,但是當它在GitLab CI中運行時,會出現奇怪的錯誤。Docker runner chroot無法在gitlab-ci-docker-runner中工作

下面是該過程:

  • 我開始多克爾容器,它運行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-跑步者在privileged模式下運行,以確保chrootmount正在工作。

回答

0

我現在工作了。似乎這是gitlab runner中的一些緩存問題。