目次
概要
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
もし、selfd-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
のリストは次のリンクで確認できます。
使えるPacakge 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 acces s 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で開発されています。興味がある方はアプリをダウンロードしてアプリを使ってくれると本当に助かります。