sironekotoroの日記

Perl で楽をしたい

CircleCI で Perl のテストをローカルでやってみた

環境構築から

この本を参考にしました。

gihyo.jp

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 の認証情報を追加しておきます。

support.circleci.com

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 -lPerl のテスト時に使われるコマンドですが、もちろん動きます。

実際のモジュールで試してみます。これも自作の雑モジュールです。こういうとき助かるー!

$ 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 ツールはどうなんだろう?という好奇心から。

最終的にはこういうのをやりたいんですよねー

  1. GitHub 上にあるリポジトリ から持ってくる

  2. Makefile とかで色々やる

  3. 色々やった後の結果で、 diff があるようだったら自動で P/R 作成

  4. これを毎日定時実行

本を読むとできそうなのですが、うちが作れるかどうかはまた別の話・・・