CPAN module を release するための docker image を作った
https://github.com/tokuhirom/docker-minil-release
CPAN module をリリースするには、色々と前準備が必要というか、、色々な CPAN module をインストールしなきゃいけなくてちょっと手間だった。最近は年に数回しかしないのだが、、リリースのたびに準備の時間がかかるので、ちょっと時間がかかって面倒なのだった。 面倒なので、ある程度設定した状態の VPS を維持していたのだが、それもなぁ、という。 このブログなども k8s に移行したので、VPS を維持する必要がなくなったのでその VPS を廃止したい。
本来なら github actions などからリリースできるようにしたいのだが、その手間もまぁまぁデカイということで、コスパないしタイパが良い範囲でやろうかなと。。 ということで、ある程度設定された状態の docker image を作っておこうかなと言う感じ。
実装の解説
FROM perl:latest
とすることにより、perl の docker image を利用する。正直、常に最新版を使ってリリースすりゃいいので、latest image を利用。
RUN apt update
RUN apt upgrade -y
RUN apt install -y vim
vim がはいってないと minil の機能である Changes の編集機能がつかえないので、vim を入れる。
ENV PERL_CPANM_OPT="--notest --no-man-pages --with-recommends --with-suggests --with-all-features --with-configure --with-develop"
ENV を設定して、とにかく依存っぽいやつをガンガン入れるように設定する。こうしないとテストコケることが多くなる。
続いて肝心の minilla を入れる。
RUN cpanm Minilla
あとは、インストールに時間かかる感じの依存をガンガン入れていく。
RUN cpanm Amon2
RUN cpanm DBD::SQLite LWP::Protocol::https DBD::mysql
RUN cpanm Catalyst::Runtime
RUN cpanm DBIx::Class
RUN cpanm Dist::Milla
RUN cpanm Tiffany
RUN cpanm Task::BeLike::TOKUHIROM
RUN cpanm Test::Perl::Critic Perl::Critic
RUN cpanm HTTP::Server::Simple::CGI Spiffy WWW::MobileCarrierJP
minilla はリリースプロセスの中で git commit するので、user.email, user.name を設定しておく。
RUN git config --global user.email "[email protected]"
RUN git config --global user.name "Tokuhiro Matsuno"
起動時に、/target/
にマウントされたソースコードを対象に、cpanm を使って依存を入れて、minil release が実行されるようにする。
WORKDIR /target/
CMD [ "/bin/bash", "-c", "cpanm --installdeps . && minil release" ]
利用方法
docker pull してイメージを取得する。
docker pull ghcr.io/tokuhirom/docker-minil-release:latest
あとは適当に volume を mount しながら実行するだけ。簡単。
docker run -it --rm -v $PWD:/target/ -v $HOME/.pause:/root/.pause -v $HOME/.ssh:/root/.ssh --name minil-release-app ghcr.io/tokuhirom/docker-minil-release:latest