まくろぐ

Azure Pipelines で Hugo サイトのビルド&デプロイ

更新:
作成:
Git リポジトリ内の Hugo コンテンツが更新されたときに、自動的に hugo コマンドで Web サイトをビルドし、hugo deploy コマンドでデプロイするように設定してみます。

前提知識

Azure Pipelines の基本的な使い方は下記ページを参考にしてください。

hugo deploy コマンドによる Hugo サイトのデプロイについては下記ページを参考にしてください。

事前準備

ここでは、Azure Pipelines の設定の説明をしますので、下記の作成・準備は終わっているものとします。

  • Hugo コンテンツ用の Git リポジトリ
    • Azure Repos や GitHub の Git リポジトリに、Hugo サイトのコンテンツをコミットしてください。
  • hugo deploy コマンドのための設定
    • Hugo の設定ファイル config.toml に、deployment.targets などの設定をしてください。
  • Azure Pipelines の作成
    • Azure DevOps のプロジェクト内に、上記の Git リポジトリと連携する Pipelines を作成してください。

Hugo 自動ビルド&デプロイのための Azure Pipelines 設定

azure-pipelines.yml
trigger:
- master

variables:
  hugo_version: '0.68.3'

pool:
  vmImage: 'ubuntu-latest'

steps:
- script: wget -O hugo.deb https://github.com/gohugoio/hugo/releases/download/v$(hugo_version)/hugo_extended_$(hugo_version)_Linux-64bit.deb
  displayName: 'Download Hugo $(hugo_version)'

- script: sudo dpkg -i hugo.deb
  displayName: 'Install Hugo $(hugo_version)'

- script: hugo
  displayName: 'Build Hugo site'

- script: hugo deploy
  displayName: 'Deploy Hugo site'
  env:
    AZURE_STORAGE_ACCOUNT: $(AZURE_STORAGE_ACCOUNT)
    AZURE_STORAGE_KEY: $(AZURE_STORAGE_KEY)

この Pipelines 設定では、下記のことを順番にシェルスクリプトで実行しています。

  1. Hugo パッケージのダウンロード(ここでは Linux の deb パッケージ)
  2. Hugo パッケージのインストール
  3. Web サイトのビルド (hugo)
  4. Web サイトのデプロイ (hugo deploy)

順番に内容を見ていきます。

Hugo パッケージのダウンロード

- script: wget -O hugo.deb https://github.com/gohugoio/hugo/releases/download/v$(hugo_version)/hugo_extended_$(hugo_version)_Linux-64bit.deb
  displayName: 'Download Hugo $(hugo_version)'

wget コマンドを使って、Hugo 本家のサイトから deb パッケージをダウンロードします。 ダウンロードする Hugo のバージョンは、YAML ファイルの先頭部分の変数で指定できるようにしています。

variables:
  hugo_version: 0.68.3

Hugo パッケージのインストール

- script: sudo dpkg -i hugo.deb
  displayName: 'Install Hugo $(hugo_version)'

dpkg コマンドを使って、1 つ前のステップでダウンロードした deb パッケージをインストールします。

Web サイトのビルド

- script: hugo
  displayName: 'Build Hugo site'

hugo コマンドを使って、Web サイトコンテンツをビルドします。 Pipelines 上のワーキングディレクトリに public ディレクトリが生成されます。

Web サイトのデプロイ

- script: hugo deploy
  displayName: 'Deploy Hugo site'
  env:
    AZURE_STORAGE_ACCOUNT: $(AZURE_STORAGE_ACCOUNT)
    AZURE_STORAGE_KEY: $(AZURE_STORAGE_KEY)

hugo deploy コマンドを使って、public ディレクトリの内容を Azure などのクラウドストレージにデプロイします。 例えば、Hugo の設定ファイルで次のように設定されている場合は、Azure の BLOB ストレージへのデプロイが実行されます。

config.toml
[[deployment.targets]]
URL = "azblob://$web"

このとき、Azure ストレージのアカウント名とキーを環境変数 (AZURE_STORAGE_ACCOUNT / AZURE_STORAGE_KEY) に設定しておく必要があるのですが、これらの秘密情報は、 Azure Pipelines の変数として設定 して、その値を環境変数に伝搬させるようにしています。

Pipelines 上の変数は、Pipelines のエディット画面の右上の Variables ボタンから設定することができます。

/p/kevcr7m/img-001_hu550c84e1e897431068245ffaaf494597_106516_700x0_resize_box_2.png

変数名と値のペアを入力するダイアログが表示されるので、ここで必要な変数を設定します。 このとき、Keep this value secret にチェックを入れておくと、値が *** のようにマスクされるようになります。

/p/kevcr7m/img-002_hu916ccad0a5025ece1d6d74b0065ea9f4_133552_700x0_resize_box_2.png

すべての変数の設定が終わったら、最後に Save ボタンを押すのを忘れないでください(個々の変数の OK ボタンだけでは保存されません)。

これで、Azure Pipelines による Hugo サイトのビルド&デプロイが自動化されます。 GitHub などの Markdown コンテンツが更新されると、次のような Job が走り、自動的に Web サイトが更新されます。

/p/kevcr7m/img-003_hu8adaa2e12e98e5e57cc2a98c18acda65_163077_700x0_resize_box_2.png

(おまけ)コンテンツを格納するディレクトリを指定する

プロジェクトの構成によっては、Web サイトのコンテンツファイルが、Git リポジトリのルートディレクトリにないことがあると思います。 例えば、Hugo 関連のファイル群が、次のように website ディレクトリ以下にあるケースなどです。

YourRepository
    +-- azure-pipelines.yml
    +-- website/
        +-- architypes/
        +-- assets/
        +-- content/
        +-- layouts/
        +-- resources/
        +-- static/
        +-- config.toml

次の Pipelines 設定では、root_dir 変数を定義して、そこを作業ディレクトリとして hugo コマンドを実行するようにしています。

azure-pipelines.yml(抜粋)
variables:
  hugo_version: '0.68.3'
  root_dir: 'website'

steps:

//...省略...

- script: hugo
  displayName: 'Build Hugo site'
  workingDirectory: $(root_dir)

- script: hugo deploy
  displayName: 'Deploy Hugo site'
  workingDirectory: $(root_dir)
  env:
    AZURE_STORAGE_ACCOUNT: $(AZURE_STORAGE_ACCOUNT)
    AZURE_STORAGE_KEY: $(AZURE_STORAGE_KEY)

上記のように、Azure Pipelines 組み込みの Command Line タスク には、workingDirectory オプションを指定できるようになっています。 ここでは root_dir 変数で指定したディレクトリを作業ディレクトリとして使用するようにしています。

cd コマンドを使えばいいのでは? スクリプトで cd $(root_dir) && hugo としてもほとんど同じですが、できるだけ OS 非依存の記述になるように、workindDirectory オプションを使った方がよいでしょう。

Azure Pipelines の使い方 (Hello World)

更新:
作成:
Azure Pipelines を使用すると、GitHub などのリポジトリへのコミットに連動させてビルド処理、デプロイ処理などを自動実行することができます。

ここでは、Azure Pipelines の Hello World として、任意の GitHub リポジトリへ git push したときのビルド処理を自動化してみます。 ビルド処理は、Hello World らしく、echo Hello, world! を実行するだけにしておきます。

DevOps organization を作成する

Azure Pipelines は、Azure DevOps の中の 1 サービスであり、まず最初に Azure DevOps の organization(組織)を作成する必要があります。 Azure アカウント上でまだ DevOps organization を作成していない場合は、下記 URL にアクセスすることで作成することができます。

DevOps organization の構成は次のようになっており、organization 以下に複数のプロジェクトを作成することができます。 各プロジェクトには、複数の Repos(Gitリポジトリ)や Pipelines (CI/CDの仕組み) を設定することができます。

+ Azure DevOps organization
    + Project
        - Repos (Gitリポジトリ)
        - Pipelines (CI/CDの仕組み)
        - Boards(かんばん、バックログ管理など)
        - ...
    + Project
        - Repos
        - Pipelines
        - Boards
        - ...

DevOps organization の作成が完了すると、その organization のポータルサイトには、次のような URL でアクセスできるようになります。

https://dev.azure.com/<organization名>/

DevOps organization 内にプロジェクトを作成する

最初は DevOps organization 内に 1 つもプロジェクトが存在しないので、まずは DevOps のサイト からプロジェクトを作成してください。 サイトにアクセスすると、自動的にプロジェクトの生成を促されるはずです。

/p/vxoctbs/img-001_hu383ce2706f51317dca095cf12afc776b_40045_700x0_resize_box_2.png

プロジェクト名を入力して、Create project ボタンを押せばすぐに作成は完了します。 ここでは、helloworld というプロジェクト名を付けてみました。

プロジェクトを作成すると、そのプロジェクトのページには、次のような URL でアクセスできるようになります。

https://dev.azure.com/<organization名>/<project名>/

プロジェクト内に Pipelines を作成する

Git リポジトリの準備

Pipelines を設定するには、何らかの Git リポジトリが必要になるので、先に GitHub などに適当なリポジトリを用意してください。 既存のリポジトリでも構いませんが、Azure Pipelines と連携させるため、自分が設定権限を持っているリポジトリでなければいけません。

あるいは、DevOps プロジェクト内にある Azure Repos に新しく Git リポジトリを作成することもできます。

Pipelines の作成

DevOps プロジェクトのサイドバーには、DevOps で使用できるサービスのアイコンが並んでいます。 Azure Pipelines を示す ロケット型のアイコン を選択すると、新しく Pipelines を作成することができます。

/p/vxoctbs/img-002.png

Create Pipelines ボタンを押したら、ダイアログに従って、次のような項目を選択していけば Pipelines の作成が完了します。

  1. 連携する Git リポジトリ(GitHub や Azure Repos 上の Git リポジトリを選ぶ)
  2. 作成する Pipelines 設定ファイルのテンプレート (azure-pipelines.yml)
ワンポイント 作成する Pipelines 設定ファイル (azure-pipelines.yml) は、複数のテンプレートの中から選択することができるのですが、Git リポジトリ内に既存プロジェクトのコードが存在する場合は、その内容に基づいてテンプレートの候補を提示してくれます。

ここでは、ほぼ空っぽのテンプレートである Starter pipeline を選択しておきます。 最後に Save and run ボタンを押すと、次のような設定ファイルが Git リポジトリにコミットされ、最初のビルドが実行されます。

azure-pipelines.yml
trigger:
- master

pool:
  vmImage: 'ubuntu-latest'

steps:
- script: echo Hello, world!
  displayName: 'Run a one-line script'

- script: |
    echo Add other tasks to build, test, and deploy your project.
    echo See https://aka.ms/yaml
  displayName: 'Run a multi-line script'

上記の記述から大体想像がつくと思いますが、次のような内容の Pipelines 設定となっています。

  • 起動トリガは master ブランチの変更とする
  • 実行環境として Ubuntu Linux を使用する
  • ビルド処理としてシェルスクリプトで echo コマンドを実行する

Pipelines の実行結果を確認する

Azure Pipelines のページを開くと、実行された Pipelines の処理結果を確認することができます。

/p/vxoctbs/img-003.png

上の図では、azure-pipelines.yml の中で次のように設定されたスクリプトが実行されていることを確認できます。

- script: echo Hello, world!
  displayName: 'Run a one-line script'

これで、Azure Pipelines の Hello World は完成です。 あとは、azure-pipelines.yml の記述を更新することで、ビルド処理をカスタマイズしていきます。

読書メモ『WORK SHIFT ワークシフト』リンダ・グラットン

更新:
作成:

朝 7 時に人工知能エージェントが立ち上がり、壁に 300 件のメールが映し出される。。。

ようこそ!いつも仕事に追われ続ける未来へ!

『WORK SHIFT』は、『LIFE SHIFT』 でも有名なリンダ・グラットンさんの著書で、人生 100 年時代の働き方改革について考えている人にとってバイブルとされている本です。

私にとっても、これから 何に重点をおいて仕事と向き合っていくべきか という考え方に、少なからず影響を与えてくれた本です。 中でも、 産業革命以前の職人仕事の時代へ回帰していく という表現にはとても共感を覚え、決して専門技術を日々追求しない管理職人間(その企業でしか通用しない人間)にはならないぞと誓いました。

ここ数十年間の「常識的な働き方」とはどんなものでしょうか?

  • 朝 9 時から夕方 5 時まで勤務する
  • 月曜から金曜日まで働いて週末に休む
  • 学校を卒業してから引退するまで 1 つの会社で働きあげる
  • 親や兄弟と同じ国で暮らす
  • いつも同じ顔ぶれの同僚と仕事をする

おそらく多くの人が感じているように、こういった従来の働き方・生き方は通用しなくなりつつあります。 そのような未来において、リンダ氏は、次のような 3 つのシフト が必要だと述べています。

  1. 広く浅い知識しか持たないゼネラリストから、高度な専門技能を備えたスペシャリストへのシフト
    • ゼネラリスト的な技能を尊ぶ常識は問い直すべきである。
  2. 孤独に競い合う生き方から、他の人と関わり協力し合う生き方へのシフト
    • 職業生活とキャリアを成功させる土台が個人主義と競争原理であるという常識は問い直すべきである。
  3. 大量消費を志向するライフスタイルから、意義と経験を重んじるバランスの取れたライフスタイルへのシフト
    • どういう職業人生が幸せかという常識を問い直し、消費をひたすら追求する人生から脱却し、情熱的に何かを生み出す人生に転換すべきである。

以下、上記の 3 つのシフトについてメモメモ。

第一のシフト(ゼネラリストから「連続スペシャリスト」へ)

未来の世界では、その他大勢から自分を差別化することがますます重要になる。 そのために、時間と労力を費やして専門分野の知識と技能を高めなくてはならない。 未来の世界では、広く浅い知識を持つのではなく、いくつかの専門技能を連続的に習得していかなくてはならない。

  • 第1のシフトに必要な資質

    • 専門技能の連続的習得 … 将来ニーズが高まりそうなジャンルの高度な専門知識と技能を身につけ続ける
    • セルフマーケティング … 自分の能力を取引相手に納得させる材料を確立する
  • 専門性の低い ゼネラリスト的なマネジメント技能(管理職)は、特定の企業以外で通用しない。大企業では、その代わりにそこで働き続けられるという暗黙の契約があったが、そうした契約は徐々に崩れ始めている。しかも専門性の低い技能は、Wikipedia や Google Analytics のようなオンラインサービスによって急速に取って代わられつつある。

  • 長い時間をかけて築いた人脈も、昔ほどの価値を持たない。SNS を利用すれば、誰でも世界中に人的ネットワークを広げられる時代になっている。ゼネラリストからの脱却は、ある意味で産業革命以前の 職人仕事の時代への回帰 でもある。

  • 大企業に勤めることにも利点はある、それは、見えない存在にならずにすむこと。しかしこの先、会社があなたの能力証明をしてくれることは期待しづらくなる。上司が頻繁に入れ替わり、社員だけでなく社外の人と一緒に仕事をするケースが増えることで、同僚や上司との結びつきは失われていく

  • 大勢のなかで自分の存在を際立たせるのに有効な3つの方法

    1. 自分の仕事に自分の刻印を押すなり、署名を書き込むなりする
    2. 弁護士や医師のような専門職にならって、ギルド(同業者組合)やそれに類する組織をつくる
    3. 様々な要素を取り込んでキャリアのモザイクを描き、いわば協会のカリヨン・ツリー型のキャリアを実践する
  • いま必要とされているのは、昔の職人のように自分の専門分野の技術と知識を深める一方で、ほかの人たちの高度な専門技能と知識を生かすために人的ネットワークを築き上げることだ。

連続スペシャリストへの道

  1. ある技能がほかの技能より高い価値をもつのはどういう場合なのかをよく考える
    • 価値を生むと広く理解されていること
    • 希少性があること(重要>供給)
    • 他人に模倣されにくく、機械にも代用されないこと
      • 例: 生命科学、健康関連、再生可能エネルギー関連、創造性・イノベーション関連、コーチング・ケア関連
  2. 未来の世界で具体的にどういう技能が価値を持つかという予測を立てる
  3. 自分の好きなことを職業に選ぶ
  4. 専門技能に徹底的に磨きをかける
  5. ある分野に習熟した後も、ほかの分野に転身する覚悟を持ち続ける

第2のシフト(孤独な競争から「協力して起こすイノベーション」へ)

専門知識と技能を磨いてほかの人たちとの差別化を図る一方で、高度な専門知識と技能を持つ人たちと一緒に価値を生み出していかなくてはならない。 こうしたイノベーションは、 ポッセ(頼りになる少人数の盟友グループ) によって成し遂げられる。

  • 温かい人間関係が当たり前のように手に入る時代が終わり、意識的に自己再生のコミュニティを築く必要が増す。この面では、テクノロジーに頼れない。
  • ポッセのメンバーとして認められるためには、 ほかのメンバーと同等の技能をもっている と信頼される必要がある。
  • ポッセを機能させるために重要な 2 つの条件
    1. メンバーの専門分野がある程度重なり合っている
    2. お互いに信頼し合い、お互いを助けたいと思い、お互いのために時間を割くつもりがある
  • 今後は通用しない、旧来の人脈づくり
    • × 自分のイメージを好ましく見せようとする
    • × 役に立ちそうな人を見つけ出し、どうにかしてお近づきになろうとする(プッシュ(押す)プロセス)
  • ポッセを築くための、新しい人脈づくり
    • ◯ メンバーがお互いに引きつけられ合うことによって形成される
    • ◯ アイデアと知識を深く共有する
    • ◯ 相手の言葉に耳を傾け、相手から学ぶ姿勢を持つ
    • ◯ 自分と考え方が近く、力になってくれそうな人を引きつける能力がある
  • 相互の信頼を強化するうえできわめて有効な方法の一つは、 お互いに自分のポッセのメンバーを引き合わせる こと。
  • ポッセのメンバーを引きつけるには、まず自分が積極的に「発信」しなくてはならない。その際、自分がなにを成し遂げただけではなく、 何に関心があり、どういう課題を抱えているかを語る こと。
  • 古代ローマのように人間同士が触れ合いやすい環境で暮らすことがいっそう重要になる(広い歩道や広場のように、休憩し、会話を楽しめる場所、客を招待できる庭)
  • 深い友情をはぐくみやすい仕事とは?
    • 自然に友達ができやすい土地で生活できる仕事
    • ほかの人と会話をする時間とゆとりがある仕事
    • 金と権力を価値観の中心に据えず、バランスの取れたモチベーションと未来への希望をいだける仕事

第3のシフト(大量消費から「情熱を傾けられる経験」へ)

際限ない消費に終始する生活を脱却し、情熱をもってなにかを生み出す生活 に転換する必要がある。

  • 所得と消費に重きを置くのではなく、情熱をいだける有意義な経験(質の高い経験)をしたいという思いに沿った働き方を選択する必要がある。
  • 家庭や趣味、社会貢献などの面で充実した創造的経験をすることを重んじる生き方に転換するすること。
  • 経済学の分野では「限界効用の逓減」という言葉がある(あるものを得る数や量が増えれば増えるほど、それに価値を感じなくなるという法則)。 お金と消費には限界効用逓減の法則が当てはまるが、それ以外の経験にはこの法則が当てはまらない。 高度な専門技能 を磨けば磨くほど、あるいは 友達の輪 を広げれば広げるほど、私たちが新たに得る効用が減る、などということはない。

メニュー

まくろぐ
サイトマップまくへのメッセージ