-
Notifications
You must be signed in to change notification settings - Fork 0
/
.gitlab-ci.yml
109 lines (97 loc) · 4.31 KB
/
.gitlab-ci.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
image: $CI_REGISTRY/mc504/qemu-man:latest
stages:
- build
- test
before_script:
# Compile script
####
# compile.sh
####
- echo "#! /bin/sh" > /home/compile.sh
# These should be your commands
- echo "cd /usr/src" >> /home/compile.sh
- echo "make build MKUPDATE=yes" >> /home/compile.sh
# This part is needed if you want to reboot the machine within the test script (or stage). So it will reset the serial consoles and the boot config to restart and be handled by pexpect (within qemu-man script)
- echo "# Restore our configuration from .local" >> /home/compile.sh
- echo "cp ~/.local/gettytab /etc/gettytab" >> /home/compile.sh
- echo "cp ~/.local/ttys /etc/ttys" >> /home/compile.sh
- echo "cp ~/.local/boot.cfg /boot.cfg" >> /home/compile.sh
# Then you can put more commands
# For instance you can then reboot it and do some commands on other scripts
- echo "shutdown -r now" >> /home/compile.sh
- chmod +x /home/compile.sh
# Another script that can be executed. This can be another test within the same stage.
####
# script.sh
####
- echo "#! /bin/sh" > /home/script.sh
- echo "pwd" >> /home/script.sh
- echo "ls -l" >> /home/script.sh
- echo "echo Finished script" >> /home/script.sh
- chmod +x /home/script.sh
# A post-hook to get the built kernel from the guest
####
# get-kernel.sh
####
- echo "#! /bin/sh" > /home/get-kernel.sh
- echo "mkdir -p ./kernel/" >> /home/get-kernel.sh
# I get the files with the default port from the script (10022)
- echo rsync -rz -e \"ssh -p 10022\" root@localhost:/boot/minix_latest/ ./kernel/ >> /home/get-kernel.sh
- chmod +x /home/get-kernel.sh
# A pre-hook to set a kernel into the guest
####
# set-kernel.sh
####
- echo "#! /bin/sh" > /home/set-kernel.sh
- echo mkdir -p /boot/minix/new >> /home/set-kernel.sh
- echo rsync -rz -e \"ssh -p 10022\" ./kernel/ localhost:/boot/minix/new/ >> /home/set-kernel.sh
- chmod +x /home/set-kernel.sh
# A restart script that sets the new kernel (notice that we need to perform different tasks on host and guest)
# Another option could be to use ssh to run this commands on the set-kernel.sh script
####
# restart.sh
####
- echo "#! /bin/sh" > /home/restart.sh
- echo "rm /boot/minix_latest" >> /home/set-kernel.sh
- echo "ln -s /boot/minix/new /boot/minix_latest" >> /home/set-kernel.sh
- echo "shutdown -r now" >> /home/restart.sh
- chmod +x /home/restart.sh
build:
stage: build
script:
# You can customize this line with different parameters if needed. Check the qemu-man repo for all the options
# This time I only compile, and then use a post-hook script to extract the kernel from the VM into the artifacts (to be available in the kernel later)
- python -u /qemu-man.py --guest-minix-source /usr/src --host-minix-source `pwd` --host-scripts "/home/compile.sh" --post-hook-scripts "/home/get-kernel.sh"
artifacts:
paths:
- ./kernel/*
tags:
# This tag is needed to run the virtualization (if you don't use it, the script will take forever)
- docker-kvm
compile and run:
stage: build
script:
# This time I run the compile script, and then another custom script.sh (that could contain some tests). Then, once it is finished I use the post-hook to get the kernel
- python -u /qemu-man.py --guest-minix-source /usr/src --host-minix-source `pwd` --host-scripts "/home/compile.sh,/home/script.sh" --post-hook-scripts "/home/get-kernel.sh"
artifacts:
paths:
- ./kernel/*
tags:
# This tag is needed to run the virtualization (if you don't use it, the script will take forever)
- docker-kvm
test:
stage: test
script:
# Create a local script to this stage
# Or use the ones in the before_script stage
- echo "#! /bin/sh" > /home/script.sh
- echo "cd /boot/minix" >> /home/script.sh
- echo "ls" >> /home/script.sh
- chmod +x /home/script.sh
# Run the VM, but before 'install' the kernel using the pre-hook set-kernel. The script starts by rebooting the machine to launch the new kernel, and then it runs the script.sh
- python -u /qemu-man.py --guest-minix-source /usr/src --host-minix-source `pwd` --host-scripts "/home/restart.sh,/home/script.sh" --pre-hook-scripts "/home/set-kernel.sh"
# This dependency let us get the the artifacts from the previous stage
dependencies:
- build
tags:
- docker-kvm