目次
概要
DependabotはオープンソースでGitHubまたはGitLabなどでプロジェクトで使ってるライブラリのバージョンがアップデータおされたら新しいバージョンにアップデートできるようにPull request(Merge request)を生成してくれるツールです。
- Dependabot: https://github.com/dependabot
Dependabotは最初GitHubで使うため作られましたが、現在はオープンソースでどこでも使うことができますので、GitLabもDependabotを使えるようにサポートしてます。
- Dependabot for GitLab: https://gitlab.com/dependabot-gitlab/dependabot
しかし、GitLabではUltimateプランを使わないとGitLabが提供する基本的なDependabotを使うことができません。
- Dependency Scanning https://docs.gitlab.com/ee/user/application_security/dependency_scanning/
今回のブログポストではGitLabのUltimateプランではないself-managedでDependabotを使う方法について説明します。
GitLabへdependabot-script追加
GitLabでDependabotを実行するためにはDependabotを実行できる環境を作る必要があります。DependabotはDependabotを簡単に実行できる環境をdependabot-scriptリポジトリで提供してます。
次の順番でGitLabにdependabot-scriptリポジトリを追加します。
- GitLabにアクセス
- New Project
- Import project
- Repository by URL
そしてRepository URLへdependabot-scriptのリポジトリURLを入力して追加します。
- Repository URL: https://github.com/dependabot/dependabot-script
GitLab token生成
dependabot-scriptリポジトリで他のリポジトリのライブラリのバージョンを検査して、新しいバージョンがある場合 Merge requestを自動で作ります。したがって、他のリポジトリにアクセスしてMerge requestを作るため、Personal Access Tokensが必要です。

apiの権限を持つPersonal Access Tokenを生成します。
GitHub token生成
dependabot-scriptリポジトリはGitHubのAPIを使ってライブラリのバージョンを検査します。したがって、GitHubのAPIを使うためGitHubのPersonal access tokenを生成する必要があります。
GitHubでログインをした後、右上のプロフィールイメージを選択します。その後、Settingsを選択して設定画面に移動します。
設定画面で左メニューリストの一番下のDeveloper settingsを選択します。その後、Personal access tokens > Token (classic)を押してToken生成画面に移動します。

Tokenはrepoのpublic_repo権限を設定した後、生成します。
CI/CDの変数設定
このように生成したPersonal Access Tokenをdependabot-scriptのCI/CD変数に設定する必要があります。

dependabot-scriptリポジトリでSettings > CI/CD > VariablesのExpandをクリックします。
そして上で作ったGitLabのPersonal Access TokenをGITLAB_ACCESS_TOKENをkeyにして追加します。
- Key: GITLAB_ACCESS_TOKEN
- Value: token
また、GitHubのPersonal Access TokenをGITHUB_ACCESS_TOKENをkeyにして追加します。
- Key: GITHUB_ACCESS_TOKEN
- Value: token
もし、self-managedであるGitLabを使う場合、GITLAB_HOSTNAMEを一緒に設定する必要があります。
- Key: GITLAB_HOSTNAME
- Value: gitlab.dev-yakuza.com
.gitlab-ci.ymlファイル
dependabot-scriptのリポジトリを見ると.gitlab-ci.example.ymlファイルがあります。このファイルの名前を.gitlab-ci.ymlに変更します。

Schedule生成
次はDependabotを一定周期で実行して特定プロジェクトで使ってるライブラリのバージョンを確認して、新しいバージョンがある場合Merge requestを生成するように作る必要があります。
そしたら、次のようにdependabot-scriptリポジトリに新しいScheduleを追加します。

この時、Variablesに特定プロジェクトのPathとそのプロジェクトで使ってるPackage managerを設定する必要があります。
- PROJECT_PATH:
/ (ex> dev-yakuza/deku-nextjs-boilerplate) - PACKAGE_MANAGER_SET: project manager (ex> npm_and_yarn)
dependabot-scriptで設定できるPackage managerのリストは次のリンクで確認できます。
使えるPackage managerは次のようです。
- bundler
- cargo
- composer
- dep
- docker
- elm
- go_modules
- gradle
- hex
- maven
- npm_and_yarn
- nuget
- pip (includes pipenv)
- submodules
- terraform
Scheduleの実行
このように作ったScheduleを実行して実際Dependabotがうまく機能できるか確認します。

問題なければ、PROJECT_PATHに設定されたリポジトリに次のようにMerge requestが生成されたことが確認できます。

ERROR: Job failed: failed to pull image dependabot/dependabot-script
基本的に.gitlab-ci.ymlファイルの内容は変更する必要はないです。しかし、GitLabのサーバの設定によって次のようなエラーが発生する場合があります。
ERROR: Job failed: failed to pull image "dependabot/dependabot-script" with specified policies [always]: Error response from daemon: pull access denied for dependabot/dependabot-script, repository does not exist or may require 'docker login': denied: requested access to the resource is denied (manager.go: 237:2s)
この場合、.gitlab-ci.ymlファイルを次のように修正します。
# build-image:
# tags:
# - shell
# stage: build
# script:
# - docker build -t "dependabot/dependabot-script" -f Dockerfile .
.dependabot:
tags:
- docker
image: dependabot/dependabot-core
before_script:
- bundle install -j $(nproc) --path vendor
variables:
PACKAGE_MANAGER: $CI_JOB_NAME
script:
- bundle exec ruby ./generic-update-script.rb
only:
- schedules
このように修正してScheduleを実行すると問題なくMerge requestが生成されることが確認できます。
完了
これでUltimateプランではないself-managed用のGitLabにdependabot-scriptを使ってDependabotを設定して、実行する方法について見てみました。最新バージョンのライブラリを使うとセキュリティの問題を解決することができるし、急に大規模のバージョンアップデートをする必要がなくなるので、大規模のバージョンアップデートの手間がなくなります。
私のブログが役に立ちましたか?下にコメントを残してください。それは私にとって大きな大きな力になります!
アプリ広報
Dekuが開発したアプリを使ってみてください。Dekuが開発したアプリはFlutterで開発されています。興味がある方はアプリをダウンロードしてアプリを使ってくれると本当に助かります。






