環境構築から
この本を参考にしました。
Perl の例は掲載されていないですが、他の言語での例は豊富です。
なので、そっから応用していけるのではないか、していきたい!という気持ち。
$ brew install circleci
バージョン確認
$ brew info circleci circleci: stable 0.1.11393 (bottled) (以下略)
あと、Docker for Mac も必要になります。
いつもの Hello, World! の下準備
作業用のディレクトリに CircleCI 用のフォルダを作る
$ mkdir -p .circleci/
設定を記述する YAML ファイルを用意する
$ touch .circleci/config.yml
エディタで YAML ファイルを編集する
実行時に必要になる Perl の入った Docker イメージは好きなのを使ってください。Perl が入っていれば ok です、多分。
ってことで、去年くらいに作った自作の Perl 入りの Docker イメージ sironekotoro/alpine-perl
を使います。
version: 2.1 jobs: build: docker: - image: sironekotoro/alpine-perl steps: - run: perl -e 'print "Hello, World!\n"'; workflows: version: 2 workflow: jobs: - build
出来上がったファイルが文法上正しいかを確認する
$ circleci config validate Config file at .circleci/config.yml is valid.
大丈夫だったら実行します。
$ circleci local execute
ログが流れ・・・そして最後にコマンドが実行されて Success! となって終わりです。
(省略) perl -e 'print "Hello, World!\n"'; Hello, World! Success!
ちなみに、2020年11月1日より Docker Hub では pull の回数に制限が入ります。念のため、Docker Hub の認証情報を追加しておきます。
version: 2.1 references: docker_hub_authentication: &docker_hub_authentication auth: username: DockerHubでのユーザー名 password: DockerHubでのパスワード jobs: build: docker: - image: sironekotoro/alpine-perl <<: *docker_hub_authentication steps: - run: perl -e 'print "Hello, World!\n"'; workflows: version: 2 workflow: jobs: - build
circleci 上で、Perl の コマンドが実行できることがわかりました。素晴らしい!
Hello World! が動くってことは prove -l
も動くっしょ
prove -l
は Perl のテスト時に使われるコマンドですが、もちろん動きます。
実際のモジュールで試してみます。これも自作の雑モジュールです。こういうとき助かるー!
$ git clone git@github.com:sironekotoro/Acme-MetaVar.git $ cd Acme-MetaVar $ mkdir -p .circleci/ $ touch touch .circleci/config.yml
そしてお好みのエディタで .circleci/config.yml
編集します。
先の例とは、 steps セクションが異なっています。
version: 2.1 references: docker_hub_authentication: &docker_hub_authentication auth: username: DockerHubでのユーザー名 password: DockerHubでのパスワード jobs: build: docker: - image: sironekotoro/alpine-perl <<: *docker_hub_authentication steps: - checkout - run: prove -l; workflows: version: 2 workflow: jobs: - build
編集が終わったらローカルで実行です。
$ circleci local execute (中略) ====>> prove -l; prove -l; t/00_compile.t .. ok t/01_hoge.t ..... ok t/02_fuga.t ..... ok All tests successful. Files=3, Tests=3, 0 wallclock secs ( 0.04 usr 0.02 sys + 0.29 cusr 0.08 csys = 0.43 CPU) Result: PASS Success!
という感じで、CircleCI に入門したのでした。
なぜ CircleCI やろうと?
Perl のモジュールオーサリングツール Minilla で モジュールを作ると CI ツールである Travis への連携が簡単にできます。
そのテスト結果が出るのが思ったより楽しかったので、他の CI ツールはどうなんだろう?という好奇心から。
最終的にはこういうのをやりたいんですよねー
本を読むとできそうなのですが、うちが作れるかどうかはまた別の話・・・