生産性のない時間 is プライスレス

さくらのレンタルサーバ ライトを使用し、GitLab CI/CDを活用して、Astroのビルド成果物を自動的に公開する方法

公開日時:

お久しぶりです。ニシキです。

ドメイン名の自動更新をしっかり忘れていて、しばらくブログが見れない状態になっていました。 みなさんはこういうことにならないように、ドメイン名の有効期限をしっかり管理してくださいね。

さて、今回は、さくらのレンタルサーバ ライトを使用し、GitLab CI/CDを活用して、Astroのビルド成果物を自動的に公開する方法を紹介します。

具体的には、以下のような流れをGitLab CI/CDで実現します。

  1. Astroのビルドを実行する。
  2. ビルド成果物をさくらのレンタルサーバ ライトにアップロードする。

今回、2.の処理にはlftpを使用、FTPSでのアップロードを行います。

ソースコード

今回のソースコードは以下になります。

.gitlab-ci.yml

stages:
  - build
  - deploy

cache:
  key: ${CI_COMMIT_REF_SLUG}-node-modules
  paths:
    - src/blog/node_modules/

build:
  image: node:lts
  stage: build
  script:
    - cd src/blog
    - npm install
    - npm run build
  artifacts:
    paths:
      - src/blog/dist/

deploy:
  stage: deploy
  script:
    - apt-get update && apt-get install -y lftp
    - lftp -e "set ftp:ssl-auth TLS; set ftp:ssl-force true; set ftp:ssl-allow yes; set ftp:ssl-protect-list yes; set ftp:ssl-protect-data on; set ftp:ssl-protect-fxp yes; set cmd:fail-exit yes; set net:reconnect-interval-base 4; set ftp:use-mdtm no; set ftp:timezone -9; open -u $SFTP_USERNAME,$SFTP_PASSWORD $SFTP_HOST; mirror -R ./src/blog/dist /home/$SFTP_USERNAME/www/blog; quit;"
  dependencies:
    - build
  only:
    - main

さっそく、解説していきます。

解説

1. キャッシュの設定

以下のコードでは、CI/CD毎に全てのモジュールをインストールするのではなく、キャッシュを使用して、ビルド時間を短縮しています。

cache:
  key: ${CI_COMMIT_REF_SLUG}-node-modules
  paths:
    - src/blog/node_modules/

2. ビルド処理の設定

以下のコードでは、Astroのビルドを行っています。

ビルド後に、ビルド成果物をアーティファクトとして保存しています。 アーティファクトを保存することで、ビルド処理の結果を次の処理(デプロイ処理)で使用することができます。

build:
  image: node:lts
  stage: build
  script:
    - cd src/blog
    - npm install
    - npm run build
  artifacts:
    paths:
      - src/blog/dist/

3. デプロイ処理の設定

以下のコードでは、lftpを使用して、ビルド成果物をさくらのレンタルサーバ ライトにアップロードしています。

deploy:
  stage: deploy
  script:
    - apt-get update && apt-get install -y lftp
    - lftp -e "set ftp:ssl-auth TLS; set ftp:ssl-force true; set ftp:ssl-allow yes; set ftp:ssl-protect-list yes; set ftp:ssl-protect-data on; set ftp:ssl-protect-fxp yes; set cmd:fail-exit yes; set net:reconnect-interval-base 4; set ftp:use-mdtm no; set ftp:timezone -9; open -u $FTP_USERNAME,$FTP_PASSWORD $SFTP_HOST; mirror -R ./src/blog/dist /home/$FTP_USERNAME/www/blog; quit;"
  dependencies:
    - build
  only:
    - main

lftpのコマンドでは、以下のような設定を行っています。

GitLab CI/CDの設定

GitLab CI/CDにて変数を設定します。

さくらのレンタルサーバ ライトの設定

さくらのレンタルサーバ ライトの設定にて、国外からのアクセスを許可します。

まとめ

今回は、さくらのレンタルサーバ ライトを使用し、GitLab CI/CDを活用して、Astroのビルド成果物を自動的に公開する方法を紹介しました。

正直、今まで面倒くさくて手動でアップロードをしていましたが、これだけの設定で自動的にアップロードできるなら、もっと早くやっておけばよかったと思いました。

今回の記事が、未来の自分を含め、誰かの役に立てば幸いです。

(リハビリがてら、今回ものすごくまじめに書いてみました。やっぱり、まじめに書いたほうが読みやすいですね…。)

蛇足

今回、このブログのレイアウトを変更しました。 超絶シンプルなレイアウトになりましたが、Every Layoutっぽい感じの考え方も取り入れてみました。 個人的には大変満足です。

それでは~。