テクノロジー
Bitbucket Pipelines初級講座(マークダウン→HTML変換)
こんにちは、マイナビの山本です。
今回はAdvent Calendarに掲載するための記事を、「Bitbucket Pipelines初級講座(マークダウン→HTML変換)」というタイトルで書いてみました。
この記事は、マイナビ Advent Calendar 2019 6日目の記事です。
概要
自身が担当しているサービスの中に、【マイナビニュース】というものがあります。
その中で使っているマニュアルサイトの内容に変更があった場合、今までは都度HTMLファイルを修正していました。
こちらは負荷が高く利便性にも乏しい状況です。
そこで、更新作業を誰でも可能にするために、「マークダウンからHTMLに変換を簡単に行えるツールを開発する」という内容のプロジェクトを発足しました。
今回、そのプロジェクトではマークダウンからHTML変更とデプロイの自動化ができるCIツールのBitbucket Pipelinesを使用しました。
実はマイナビではBitbucket Pipelinesを使う機会はあまりありませんが、個人的に勉強になりましたので紹介したいと思います。
なおこちらは初級者~中級者向けの記事になりますので予めご了承下さい。
フロー図
ユーザーがpushしたタイミングでPipelinesにてMarkdownからHTMLを生成後、
S3にデプロイするというシンプルなフローです。
ソース
bitbuket-pipelines.yml
image: atlassian/default-image:2
pipelines:
branches:
master:
- step:
deployment: production
script:
- apt-get update --no-install-recommends
- apt-get install -y pandoc
- sh custom/transformation.sh
- pipe: atlassian/aws-s3-deploy:0.3.7
variables:
AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY
AWS_DEFAULT_REGION: "ap-northeast-1"
S3_BUCKET: "*****.****.mynavi.jp"
LOCAL_PATH: "./"
DELETE_FLAG: "true"
'*':
- step:
deployment: staging
script:
- apt-get update --no-install-recommends
- apt-get install -y pandoc
- sh custom/transformation.sh
- pipe: atlassian/aws-s3-deploy:0.3.7
variables:
AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY
AWS_DEFAULT_REGION: "ap-northeast-1"
S3_BUCKET: "stg-*****.****.mynavi.jp"
LOCAL_PATH: "./"
DELETE_FLAG: "true"
説明
今回は、本番と検証で異なるS3にデプロイするため、ブランチによる挙動を変えました。
masterとmaster以外のブランチで挙動をわけています。
まずapt-get update
をします。
※これをしないとapt-get install
が出来ません。
--no-install-recommends
は時間短縮のためにいれています。
今回Markdown→HTML変換にはpandoc
を使用します。
pandocはさまざまなファイル形式の変換に使うことができるので、とても便利です。
PDF→マークダウンなどにも対応しています。
sh custom/transformation.sh
ではpandocのコマンドをshで実行しています。(後述)
S3へのデプロイはBitbucket公式ページを参考に実装しています。
参考ページ:https://ja.confluence.atlassian.com/bitbucket/deploy-to-aws-with-s3-976772858.html
AWS CLIを用いてデプロイしている方も多いと思いますが、pipe方式の方が視覚的に分かりやすいと思います。(メンテナンス性)
transformation.sh
#!/bin/bash
# mdファイルのループ
for markdown in `ls | grep .md`
do
# マークダウンをHTMLに変換
pandoc -s --self-contained -f markdown -t html5 -o ${markdown%.*}.html $markdown -c custom/github.css
done
exit 0
説明
markdownがいくら増えてもいいようなコマンドになっています。
markdown.md、markdown2.md、markdown3.mdがあった際、
markdown.html、markdown2.html、markdown3.htmlを生成します。
markdown4.mdが追加されても自動的にmarkdown4.htmlを生成してくれます。
また、cssを当て込むことができるのでgithub.cssを適用しています。
不満点
ブランチごとに異なる挙動をするためにbranchesセクションを使用しますが、
同じコマンドを一か所にまとめれないのが不便だと感じました。(shellを使えばできる)
まとめ
結局このプロジェクトは、CIは使わずWordPressを立ち上げることになりました…(笑)
なお、今回の記事執筆の背景ですが、冒頭でも触れたようにマイナビ社内でアドベントカレンダーが発足され、私に順番がまわってきたためエンジニアブログに記載しました(Qiitaやはてなブログ、個人ブログなど、メディアは問わず)。
マイナビの技術的なブログが見れるので、併せてご覧いただければと思います。
ここまでお読みいただきありがとうございました。
執筆:山本