CIツールの学習としてCircleCIを動かしてみたのですが、Windows上でCircleCIのローカル環境を動かす際になかなかうまくいかず紆余曲折があったため記録を残します。
目次
用意したCircleCIの設定ファイル
今回はCircleCIを動かしてみるのが目的だったため、Docker上でPythonを使って"Hello, world!"を表示するだけのビルドを用意しました。(ビルドしてないけど)
version: 2.1 jobs: build: docker: - image: cimg/python:3.10.5 steps: - run: name: The First Step command: | python -c "print('Hello World!')"
Windows用のローカルCLI環境を入れてみる
↓でWindows用のローカルCLI環境の案内があるため、とりあえず入れてみました。
https://circleci.com/docs/ja/local-cli
動かしてみると早速↓のエラーが発生。
PS D:\Users\ancov\OneDrive\CircleCiSample> circleci config validate Config file at .circleci/config.yml is valid. PS D:\Users\ancov\OneDrive\CircleCiSample> circleci local execute Error: Error creating temporary config file: open /tmp\3197476852_circleci_config.yml: The system cannot find the path specified.
どうやらドライブ直下にtmpフォルダが無いとエラーになるようなので、tmpフォルダを手動で作成して再度動かしてみると、またもやエラー。
PS D:\Users\ancov\OneDrive\CircleCiSample> circleci local execute Fetching latest build environment... Docker image digest: sha256:72624b09a668f0684c0151a61231d8458defe7d2dd46430f6db33db5f63c0f88 Error: failed to execute docker: not supported by windows
CircleCIのIssueなんかを読むと、Windowsではビルドの実行に対応していないみたい?
https://github.com/CircleCI-Public/circleci-cli/issues/152
仕方がないので、WSLを使ってCircleCIのローカルCLIを動かしてみることにしました。
WSL上でローカルCLI環境を動かしてみる
Linuxの場合、公式ではSnapを利用してインストールする方法が案内されていますが、WSLの場合はSnapを使うのに小細工が必要でした。
↓を参考に、WSLにローカルCLI環境をインストールしました。
https://qiita.com/matarillo/items/f036a9561a4839275e5f
ancov@DESKTOP-17P3D24:~$ sudo apt-get update ancov@DESKTOP-17P3D24:~$ sudo apt-get install -yqq daemonize dbus-user-session fontconfig ancov@DESKTOP-17P3D24:~$ sudo daemonize /usr/bin/unshare --fork --pid --mount-proc /lib/systemd/systemd --system-unit=basic.target ancov@DESKTOP-17P3D24:~$ exec sudo nsenter -t $(pidof systemd) -a su - $LOGNAME ancov@DESKTOP-17P3D24:~$ sudo apt install snapd ancov@DESKTOP-17P3D24:~$ sudo snap refresh ancov@DESKTOP-17P3D24:~$ sudo snap install docker circleci ancov@DESKTOP-17P3D24:~$ sudo snap connect circleci:docker docker
ただ、これで実行してもエラーが発生しました。
ancov@DESKTOP-17P3D24:/mnt/d/Users/ancov/OneDrive/CircleCiSample$ circleci config validate Config file at .circleci/config.yml is valid. ancov@DESKTOP-17P3D24:/mnt/d/Users/ancov/OneDrive/CircleCiSample$ sudo circleci local execute Fetching latest build environment... Docker image digest: sha256:62f727286472ed21ad35c59d71ae72b373f566557b69951e2d3471b85c2ba587 Error: failed to start event processor: failed to compute task config: failed to read config file: read /tmp/local_build_config.yml: is a directory
↓を見る限りだと、マウントドライブで利用はできないみたい?
https://github.com/CircleCI-Public/circleci-cli/issues/212
WSLの中に設定ファイルを作成してもいいのですが、実はDocker Desktop for WindowsのDockerをWSL上で動かす機能があったので、それを利用してみます。
WSLからWindowsのDockerを使って動かす
SnapでインストールするとLinux上のDockerが使われてしまいそうなので、CircleCIのローカルCLI環境を手動でインストールしました。
(あまり真面目に調べてないので、Snapでインストールしてもできるかも)
ancov@DESKTOP-17P3D24:~$ sudo sh -c "curl -fLSs https://circle.ci/cli | bash" [sudo] password for ancov: Starting installation. Installing CircleCI CLI v0.1.20500 Installing to /usr/local/bin /usr/local/bin/circleci
WindowsのDockerは、デフォルトのWSLディストリビューションに対してのみ使用できるらしいので、デフォルトを変更します。
Docker Desktopの設定で"Enable WSL 2 Windows Features"にチェックが入ってなければ、これにチェックを入れる必要もあるみたいです。
PS D:\Users\ancov> wsl -l -v NAME STATE VERSION * docker-desktop-data Running 2 Ubuntu Running 2 docker-desktop Running 2 PS D:\Users\ancov> wsl --set-default Ubuntu
これで無事に動きました。
ancov@DESKTOP-17P3D24:/mnt/d/Users/ancov/OneDrive/CircleCiSample$ circleci config validate Config file at .circleci/config.yml is valid. ancov@DESKTOP-17P3D24:/mnt/d/Users/ancov/OneDrive/CircleCiSample$ sudo circleci local execute Fetching latest build environment... Docker image digest: sha256:9d8489ec41d4835fbc1ae1a4b42d23bb9dd68838c803f7f3779d2ce43b7e050b ====>> Spin up environment ...... The redacted variables listed above will be masked in run step output.====>> The First Step #!/bin/bash -eo pipefail python -c "print('Hello World!')" Hello World! Success!
参考文献
CircleCI のローカル CLI のインストール - CircleCI
https://circleci.com/docs/ja/local-cli
設定ファイルの概要 - CircleCI
https://circleci.com/docs/ja/config-intro
いまさらだけどCircleCIに入門したので分かりやすくまとめてみた - Qiita
https://qiita.com/gold-kou/items/4c7e62434af455e977c2
Error: Error creating temporary config file · Issue #411 · CircleCI-Public/circleci-cli · GitHub
https://github.com/CircleCI-Public/circleci-cli/issues/411
Unable to run circleci local execute
from windows machine · Issue #152 · CircleCI-Public/circleci-cli · GitHub
https://github.com/CircleCI-Public/circleci-cli/issues/152
WSL2(Ubuntu 20.04)上でSnapdを動かす
https://zenn.dev/dozo/articles/63c3e066f3c6ed
WSL2でSystemdを使うハック - Qiita
https://qiita.com/matarillo/items/f036a9561a4839275e5f
local execute - fails to read config file · Issue #212 · CircleCI-Public/circleci-cli · GitHub
https://github.com/CircleCI-Public/circleci-cli/issues/212
Windows10+WSL2(Ubuntu)+DockerでCircleCIのローカル実行ができる環境を作る - Qiita https://qiita.com/ysd_marrrr/items/a9370c4c88b5da094194
WSL:WindowsとLinuxでファイルを交換する
https://zenn.dev/ohno/articles/13af6f4e1588a5
Windows Subsystem for Linux に関するドキュメント | Microsoft Docs
https://docs.microsoft.com/ja-jp/windows/wsl/