blob: 0ca835c5bfcfe8f22a0eabc2c57e7049a295ee07 [file] [log] [blame]
stages:
- prepare
- build
- test
- predeploy
- deploy
variables:
DOCKER_FILE: Dockerfile
DOCKER_TAG: latest
DOCKER_IMAGE: ${CI_REGISTRY_IMAGE}
IMAGE: ${CI_REGISTRY_IMAGE}
GIT_SUBMODULE_STRATEGY: normal
FF_GITLAB_REGISTRY_HELPER_IMAGE: 1
.prepare:docker: &prepare_docker
stage: prepare
image:
name: docker
before_script:
- docker version
- docker login --username "${CI_REGISTRY_USER}" --password "${CI_REGISTRY_PASSWORD}" "${CI_REGISTRY}"
script:
- docker build -f ${DOCKER_FILE} -t ${DOCKER_IMAGE}:${DOCKER_TAG} .
- docker push ${DOCKER_IMAGE}:${DOCKER_TAG}
tags:
- docker
prepare:docker:
<<: *prepare_docker
build:demo:
stage: build
image: ${CI_REGISTRY_IMAGE}
before_script:
- rustup update
script:
- cargo build -p rusty_demo
- cargo build -p rusty_demo --release
- cd loader
- make
- make release=1
- cd ..
artifacts:
paths:
- target/x86_64-unknown-hermit/debug/rusty_demo
- target/x86_64-unknown-hermit/release/rusty_demo
- loader/target/x86_64-unknown-hermit-loader/debug/rusty-loader
- loader/target/x86_64-unknown-hermit-loader/release/rusty-loader
build:httpd:
stage: build
image: ${CI_REGISTRY_IMAGE}
before_script:
- rustup update
script:
- cargo build --manifest-path examples/httpd/Cargo.toml --no-default-features --features pci,acpi,smoltcp,vga,dhcpv4 --release
- cd loader
- make release=1
- cd ..
artifacts:
paths:
- target/x86_64-unknown-hermit/release/httpd
- loader/target/x86_64-unknown-hermit-loader/release/rusty-loader
test:uhyve:
stage: test
dependencies:
- build:demo
image: ${CI_REGISTRY_IMAGE}
script:
- lscpu
- kvm-ok
- cargo install uhyve
- uhyve -v -c 1 target/x86_64-unknown-hermit/debug/rusty_demo
- uhyve -v -c 2 target/x86_64-unknown-hermit/debug/rusty_demo
- uhyve -v -c 1 target/x86_64-unknown-hermit/release/rusty_demo
- uhyve -v -c 2 target/x86_64-unknown-hermit/release/rusty_demo
tags:
- privileged
test:qemu:
stage: test
dependencies:
- build:demo
image: ${CI_REGISTRY_IMAGE}
script:
- lscpu
- kvm-ok
- qemu-system-x86_64 -display none -smp 1 -m 64M -serial stdio -kernel loader/target/x86_64-unknown-hermit-loader/debug/rusty-loader -initrd target/x86_64-unknown-hermit/debug/rusty_demo -cpu qemu64,apic,fsgsbase,rdtscp,xsave,fxsr,rdrand -enable-kvm
- qemu-system-x86_64 -display none -smp 2 -m 64M -serial stdio -kernel loader/target/x86_64-unknown-hermit-loader/debug/rusty-loader -initrd target/x86_64-unknown-hermit/debug/rusty_demo -cpu qemu64,apic,fsgsbase,rdtscp,xsave,fxsr,rdrand -enable-kvm
- qemu-system-x86_64 -display none -smp 1 -m 64M -serial stdio -kernel loader/target/x86_64-unknown-hermit-loader/release/rusty-loader -initrd target/x86_64-unknown-hermit/release/rusty_demo -cpu qemu64,apic,fsgsbase,rdtscp,xsave,fxsr,rdrand -enable-kvm
- qemu-system-x86_64 -display none -smp 2 -m 64M -serial stdio -kernel loader/target/x86_64-unknown-hermit-loader/release/rusty-loader -initrd target/x86_64-unknown-hermit/release/rusty_demo -cpu qemu64,apic,fsgsbase,rdtscp,xsave,fxsr,rdrand -enable-kvm
tags:
- privileged
test:httpd_image:
stage: test
dependencies:
- build:httpd
image: ${CI_REGISTRY_IMAGE}
script:
- dd if=/dev/zero of=disk.img bs=1k count=1M
- echo ',,,*;' | sfdisk disk.img
- mkfs.ext2 -F -E offset=1048576 disk.img
- kpartx -a -v disk.img
- LOOP_DEVICE=$(losetup -j ${PWD}/disk.img | awk '{sub(/:/,"",$1); print $1}')
- LOOP_NAME=$(basename ${LOOP_DEVICE})
- mount /dev/mapper/${LOOP_NAME}p1 /mnt/
- grub-install --root-directory=/mnt --locales= --themes= --fonts= --no-floppy --modules="normal part_msdos ext2 multiboot biosdisk" ${LOOP_DEVICE}
- cp target/x86_64-unknown-hermit/release/httpd /mnt/boot/
- cp loader/target/x86_64-unknown-hermit-loader/release/rusty-loader /mnt/boot/loader
- |
cat > /mnt/boot/grub/grub.cfg << EOF
default=0
timeout=0
menuentry "httpd" {
multiboot --quirk-bad-kludge /boot/loader
module /boot/httpd
boot
}
EOF
- umount /mnt
- kpartx -d disk.img
- qemu-img convert -f raw -O qcow2 disk.img disk.qcow2
tags:
- privileged
artifacts:
paths:
- disk.qcow2
only:
refs:
- master
.deploy:httpd_docker: &deploy_httpd_docker
stage: predeploy
dependencies:
- test:httpd_image
image:
name: docker
before_script:
- docker version
- docker login --username "${CI_REGISTRY_USER}" --password "${CI_REGISTRY_PASSWORD}" "${CI_REGISTRY}"
script:
- |
cat << END > ${DOCKER_FILE}
FROM scratch
ADD disk.qcow2 /disk/
END
- docker build -f ${DOCKER_FILE} -t ${DOCKER_IMAGE}/httpd:latest .
- docker push ${DOCKER_IMAGE}/httpd:latest
tags:
- docker
only:
refs:
- master
deploy:httpd_docker:
<<: *deploy_httpd_docker
.deploy:demo_docker: &deploy_demo_docker
stage: predeploy
dependencies:
- build:demo
image:
name: docker
before_script:
- docker version
- docker login --username "${CI_REGISTRY_USER}" --password "${CI_REGISTRY_PASSWORD}" "${CI_REGISTRY}"
script:
- |
cat << END > ${DOCKER_FILE}
FROM registry.git.rwth-aachen.de/acs/public/hermitcore/rusty-loader/loader:latest
ADD target/x86_64-unknown-hermit/release/rusty_demo /hermit/
ENTRYPOINT ["/hermit/rusty_demo"]
END
- docker build -f ${DOCKER_FILE} -t ${DOCKER_IMAGE}/demo:latest .
- docker push ${DOCKER_IMAGE}/demo:latest
tags:
- docker
only:
refs:
- master
deploy:demo_docker:
<<: *deploy_demo_docker
deploy:httpd:
stage: deploy
dependencies:
- deploy:httpd_docker
variables:
KUBECONFIG: /root/.kube/config
KUBEVIRT_VERSION: v0.36.0
environment:
name: production
image: registry.git.rwth-aachen.de/acs/internal/cloud/kubernetes/deployment:2
before_script:
- mkdir -p $(dirname ${KUBECONFIG})
- echo "${KUBECONFIG_ENCODED}" | base64 -d > ${KUBECONFIG}
- kubectl cluster-info
- kubectl version
- helm version
- wget https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/virtctl-${KUBEVIRT_VERSION}-linux-amd64
- chmod a+rx virtctl-${KUBEVIRT_VERSION}-linux-amd64
- mv virtctl-${KUBEVIRT_VERSION}-linux-amd64 /usr/bin/virtctl
script:
- kubectl delete -f k8s/httpd.yml || true
- sleep 10
- kubectl apply -f k8s/httpd.yml
only:
refs:
- master