フロントの動きをちょっと確認したい場合など、Herokuの無料枠はとても便利です。
HeokuはGithubからの自動デプロイは簡単にできますが、Gitlabからの自動デプロイは色々と準備が必要となります。
そこで今回はGitlabからHerokuへ自動デプロイするまでの手順を説明していきたいと思います。
目次
Gitlabの運用環境
- Raspberry Pi 4 8GB
- Ubuntu 20.04.3 LTS
- apache 2.4.41
- Gitlab EE 14.7.0
筆者の現在の環境が上記というだけで合わせる必要はありませんが、他のOSやバージョンを使っている場合の方法について質問されても答えられないので、ご了承ください。
事前準備
Gitlabは事前にインストールしておいてください。インストール時にどのような設定をしていたかは忘れてしまったので、インストール方法は割愛します。
また、Herokuのアカウント作成も行っておいてください。
Herokuでの操作
プロジェクトの作成
Herokuにログインして[New]>[Create new app]をクリックしてください。
[App name]に任意のアプリ名を入力して、[Create app]をクリックしてプロジェクトの作成は完了です。
APIキーのコピー
右上のアカウントアイコンから[Account Setting]をクリックします。
下にスクロールして、[API Key]のところで[Reveal]をクリックしてAPIキーを表示したらコピーしておきます。
以上でHerokuでの操作は完了です。
ターミナルでの操作
Gitlab runnerのインストール
各環境でのインストール方法は公式ページを参照してください。Ubuntuでのインストール方法は以下になります。
1 2 |
curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | sudo bash sudo apt-get install gitlab-runner |
Gitlabで自動デプロイしたいプロジェクトを開いて、[設定]>[CI/CD]>[Runner]>[展開]でGitlab runnerの設定を開きます。
上記画像の「Register the runner with this URL:」のURLを下のコマンドの「 https://your.domain 」と置き換え、「And this registration token:」を「 token_code_xxxx 」と置き換えて、コマンドを実行します。
コマンド実行時にタグを追加するかなどの質問がありますが、何も入力せずEnterを押して大丈夫です。
1 |
sudo gitlab-runner register --url https://your.domain --registration-token token_code_xxxx |
Git runnerのページを再読み込みして、「利用可能な Specific runner」に追加されていれば完了です。
sudoの設定
現在の設定ではgitlab-runnerがsudoを実行できないので、sudoの設定を変更します。
visudoでsudoの設定を開きます。
1 |
sudo visudo |
sudoの箇所を以下のように変更し、パスワード無しでsudoできるようにします。
全てパスワード無しはセキュリティ的に怖いという方は、許可する内容を適宜修正してください。
1 2 3 4 5 |
%sudo ALL=(ALL:ALL) ALL ↓ %sudo ALL=NOPASSWD: ALL |
gitlab-runnerがsudoを実行できるように、sudoグループに追加します。
1 |
sudo adduser gitlab-runner sudo |
Gitlabでの操作
環境変数の追加
Gitlabで自動デプロイしたいプロジェクトを開いて、[設定]>[CI/CD]>[変数]>[展開]で環境変数の設定を開き、[変数の追加]をクリックします。
[キー]に「APPNAME_OF_HEROKU」、[値]にHerokuのプロジェクト名を指定し、[Protect variable]のチェックを外して、[変数の追加]をクリックします。
[キー]に「HEROKU_API_KEY」、[値]にコピーしたHerokuのAPIキーを指定し、[Protect variable]のチェックを外して、[変数の追加]をクリックします。
.gitlab-cd.ymlの追加
自動デプロイしたいプロジェクトの直下に「.gitlab-cd.yml」というファイルを以下の内容で作成し、コミット、プッシュします。
「image」の部分はデプロイするプロジェクトの環境に合わせて修正してください。今回はnode.jsのプロジェクトのため、「node:latest」としています。
「master」の部分はデプロイしたいブランチ名を入力してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
image: node:latest stages: - production production: type: deploy stage: production image: ruby:latest script: - sudo apt-get update -qy - sudo apt-get install -y ruby-dev - sudo gem install dpl - sudo dpl --provider=heroku --app=$APPNAME_OF_HEROKU --api-key=$HEROKU_API_KEY # security add the heroku api to CI/CD setting only: - master #branch name to deploy on heroku |
設定が上手くいっていれば、上記のファイルをプッシュすると自動デプロイが開始されると思います。
以下の画像のように[成功]と表示されていれば、Herokuにデプロイ完了です。
デプロイしたアプリを開くには、Herokuのプロジェクトページを開いて、[Open app]をクリックします。
以上でGitlabからHerokuへの自動デプロイの手順は完了です。