| stages: |
| - prepare |
| - build |
| - test |
| - predeploy |
| - deploy |
| |
| variables: |
| DOCKER_FILE: Dockerfile |
| DOCKER_TAG: latest |
| DOCKER_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 --no-cache -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: ${DOCKER_IMAGE}:${DOCKER_TAG} |
| 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: ${DOCKER_IMAGE}:${DOCKER_TAG} |
| 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: ${DOCKER_IMAGE}:${DOCKER_TAG} |
| script: |
| - lscpu |
| - kvm-ok |
| - cargo +nightly install --git https://github.com/hermitcore/uhyve.git --locked 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: ${DOCKER_IMAGE}:${DOCKER_TAG} |
| 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,xsaveopt,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,xsaveopt,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,xsaveopt,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,xsaveopt,fxsr,rdrand -enable-kvm |
| tags: |
| - privileged |
| |
| test:httpd_image: |
| stage: test |
| dependencies: |
| - build:httpd |
| image: ${DOCKER_IMAGE}:${DOCKER_TAG} |
| 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 |