목차
개요
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로 개발되었습니다.관심있으신 분들은 앱을 다운로드하여 사용해 주시면 정말 감사하겠습니다.














![[심통]현장에서 바로 써먹는 리액트 with 타입스크립트 : 리액트와 스토리북으로 배우는 컴포넌트 주도 개발, 심통](https://img1c.coupangcdn.com/image/affiliate/banner/7cba8cb0601eebaf88a17a0c3cf65a63@2x.jpg)