VagrantでZero to Production in Rust のCI環境をコード化する

やりたいこと

やること

  1. 結合テスト環境用のVagrant導入済みマシンを構築
  2. Vagrantfileに環境をコード化
  3. GitLab Pipeline にvagrant upを組み込み、テストが通ることを確認する

用意したこと

必要なパッケージ類

プロビジョン用コマンド

これが後述のVagrantfileで指定するtest_integration.shの中身になる。

#!/usr/bin/env sh

cd /vagrant/script

sudo zypper in -y postgresql git docker gcc libopenssl-1_1-devel
sudo usermod -aG docker vagrant
sudo systemctl enable --now docker
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source $HOME/.cargo/env
cargo install --version=0.5.7 sqlx-cli --no-default-features --features postgres
sh ./init_db.sh
cargo test

Vagrantfile

Vagrant.configure("2") do |config|
  config.vm.box = "opensuse/Leap-15.3.x86_64"
  config.vm.provision :shell, path: "script/test_integration.sh"
  config.vm.provider "virtualbox" do |v|
    v.memory = 2048
    v.cpus = 2
  end
end

課題

環境のゼロから構築、大量のパッケージインストール、コードのビルドをするので、いろいろなリソースをバカ食いする。環境にやさしくない。