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