실행 시 발생하는 Gem: FilePermissionError 처리
6694 단어 RubyGitHub Actionsrubocoptech
현상.
Reviewdog/action-rubocop을 사용하여 GiitHub Actions를 실행할 때 Gem:FilePermissionError가 발생했습니다.
GiitHub Acittons 로그
Run reviewdog/action-rubocop@v1
🐶 Installing reviewdog ... https://github.com/reviewdog/reviewdog
Installing rubocop with extensions ... https://github.com/rubocop/rubocop
ERROR: While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /var/lib/gems/2.7.0 directory.
Error: Process completed with exit code 1.
이 때의 작업 프로세스 파일은 다음과 같은yml입니다.name: reviewdog
on: [pull_request]
jobs:
rubocop:
name: runner / rubocop
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v1
- name: rubocop
uses: reviewdog/action-rubocop@v1
with:
rubocop_version: 1.8.1
# rubocop_extensions: rubocop-rails:gemfile rubocop-rspec:gemfile
github_token: ${{ secrets.github_token }}
reporter: github-pr-review # Default is github-pr-check
조사하다.
문제 발생 지점 파악
우선 문제가 발생한 곳의 특정이다.Reviewdog의 코드, action을 찾았습니다.yml script.쉬를 실행하고 있는 것 같습니다.
・・・略・・・
runs:
using: 'composite'
steps:
- run: $GITHUB_ACTION_PATH/script.sh
・・・略・・・
이거 scirpt.sh와 현상의 로그를 확인한 후
Installing rubocop with extensions ... https://github.com/rubocop/rubocop
의 로그를 발견하면 실패하고gem install가 실패합니다.・・・略・・・
echo '::group::🐶 Installing reviewdog ... https://github.com/reviewdog/reviewdog'
curl -sfL https://raw.githubusercontent.com/reviewdog/reviewdog/master/install.sh | sh -s -- -b "${TEMP_PATH}" "${REVIEWDOG_VERSION}" 2>&1
echo '::endgroup::'
echo '::group:: Installing rubocop with extensions ... https://github.com/rubocop/rubocop'
# if 'gemfile' rubocop version selected
if [ "${INPUT_RUBOCOP_VERSION}" = "gemfile" ]; then
# if Gemfile.lock is here
if [ -f 'Gemfile.lock' ]; then
# grep for rubocop version
RUBOCOP_GEMFILE_VERSION=$(ruby -ne 'print $& if /^\s{4}rubocop\s\(\K.*(?=\))/' Gemfile.lock)
# if rubocop version found, then pass it to the gem install
# left it empty otherwise, so no version will be passed
if [ -n "$RUBOCOP_GEMFILE_VERSION" ]; then
RUBOCOP_VERSION=$RUBOCOP_GEMFILE_VERSION
else
printf "Cannot get the rubocop's version from Gemfile.lock. The latest version will be installed."
fi
else
printf 'Gemfile.lock not found. The latest version will be installed.'
fi
else
# set desired rubocop version
RUBOCOP_VERSION=$INPUT_RUBOCOP_VERSION
fi
gem install -N rubocop --version "${RUBOCOP_VERSION}"
# Traverse over list of rubocop extensions
for extension in $INPUT_RUBOCOP_EXTENSIONS; do
# grep for name and version
INPUT_RUBOCOP_EXTENSION_NAME=$(echo "$extension" |awk 'BEGIN { FS = ":" } ; { print $1 }')
INPUT_RUBOCOP_EXTENSION_VERSION=$(echo "$extension" |awk 'BEGIN { FS = ":" } ; { print $2 }')
# if version is 'gemfile'
if [ "${INPUT_RUBOCOP_EXTENSION_VERSION}" = "gemfile" ]; then
# if Gemfile.lock is here
if [ -f 'Gemfile.lock' ]; then
# grep for rubocop extension version
RUBOCOP_EXTENSION_GEMFILE_VERSION=$(ruby -ne "print $& if /^\s{4}$INPUT_RUBOCOP_EXTENSION_NAME\s\(\K.*(?=\))/" Gemfile.lock)
# if rubocop extension version found, then pass it to the gem install
# left it empty otherwise, so no version will be passed
if [ -n "$RUBOCOP_EXTENSION_GEMFILE_VERSION" ]; then
RUBOCOP_EXTENSION_VERSION=$RUBOCOP_EXTENSION_GEMFILE_VERSION
else
printf "Cannot get the rubocop extension version from Gemfile.lock. The latest version will be installed."
fi
else
printf 'Gemfile.lock not found. The latest version will be installed.'
fi
else
# set desired rubocop extension version
RUBOCOP_EXTENSION_VERSION=$INPUT_RUBOCOP_EXTENSION_VERSION
fi
# Handle extensions with no version qualifier
if [ -z "${RUBOCOP_EXTENSION_VERSION}" ]; then
unset RUBOCOP_EXTENSION_VERSION_FLAG
else
RUBOCOP_EXTENSION_VERSION_FLAG="--version ${RUBOCOP_EXTENSION_VERSION}"
fi
# shellcheck disable=SC2086
gem install -N "${INPUT_RUBOCOP_EXTENSION_NAME}" ${RUBOCOP_EXTENSION_VERSION_FLAG}
done
echo '::endgroup::'
export REVIEWDOG_GITHUB_API_TOKEN="${INPUT_GITHUB_TOKEN}"
echo '::group:: Running rubocop with reviewdog 🐶 ...'
・・・略・・・
이gem의 설치 실패와 이번 오류 로그를 조사한 결과 다음과 같은 두 편의 글이 발견되었다.
GiitHub Actions에 gem을 사용하여 Rubbocop을 설치할 때 GiitHub Actions 시스템 측면의 Ruby를 참조한 것 같습니다. 따라서 이 참조가 Permission Error로 바뀌면서 이런 현상이 발생했습니다.
워크플로우에서 ruby/setup-ruby 동작을 추가하여 GiitHub Actions의 로컬 측면 Ruby를 참조하여 Permission Error에서 발생하지 않은 상태에서gem을 설치할 수 있습니다."
대응
워크플로우 파일에 ruby/setup-ruby 작업을 추가하여 Ruby 버전(3.00)을 지정하여 이 문제를 해결했습니다.
name: reviewdog
on: [pull_request]
jobs:
rubocop:
name: runner / rubocop
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v1
- uses: ruby/setup-ruby@v1
with:
ruby-version: 3.0.0
- name: rubocop
uses: reviewdog/action-rubocop@v1
with:
rubocop_version: 1.8.1
github_token: ${{ secrets.github_token }}
reporter: github-pr-review # Default is github-pr-check
Reference
이 문제에 관하여(실행 시 발생하는 Gem: FilePermissionError 처리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/m_yamashii/articles/bf6a52a71f887d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)