본문 바로가기
프로그램 (PHP,Python)

Git 저장소에서 특정 폴더나 파일 퍼미션을 적용(유지)하는 방법

by 날으는물고기 2024. 5. 29.

Git 저장소에서 특정 폴더나 파일 퍼미션을 적용(유지)하는 방법

File:Git operations.svg - Wikipedia

Git은 파일의 소유자나 퍼미션 정보를 기본적으로 추적하지 않습니다. Git 저장소에 파일을 커밋하고 다른 시스템으로 이 파일들을 클론하거나 푸시할 때, 소유자나 퍼미션 정보는 전송되지 않습니다. 대신, 일반적으로 파일은 클론된 시스템에서 사용자의 기본 파일 생성 규칙에 따라 생성됩니다.

 

하지만, Git은 .gitattributes 파일을 사용하여 특정 파일의 실행 권한을 관리할 수 있습니다. 이 파일에서 git에게 특정 파일이 실행 가능해야 함을 명시할 수 있으며, 이 정보는 저장소와 함께 전송됩니다. 예를 들어, 스크립트 파일에 실행 권한을 설정하고 싶다면 .gitattributes 파일에 해당 파일에 대해 *filename* mode=755와 같이 설정할 수 있습니다. 그러나 이것은 실행 권한에 한정된 정보이고, 소유자 정보나 그 외 다른 퍼미션 세부사항은 포함되지 않습니다.

 

Git 저장소에서 특정 폴더나 파일에 대해서만 권한을 관리하고 싶다면, 몇 가지 방법을 고려할 수 있습니다. 이는 자동화된 스크립트나 .gitattributes 파일 설정을 통해 구현할 수 있습니다.

1. .gitattributes 파일 사용하기

특정 파일이나 폴더에 대한 실행 권한만 설정하고 싶다면, .gitattributes 파일에 해당 파일이나 패턴을 명시적으로 지정할 수 있습니다. 예를 들어, 특정 폴더 내 모든 스크립트 파일에 실행 권한을 주려면 다음과 같이 설정할 수 있습니다.

scripts/* mode=755

이렇게 하면 scripts/ 폴더 아래의 모든 파일이 자동으로 실행 권한을 받게 됩니다. 단, 이 설정은 실행 권한에 한정되며, 다른 세부 퍼미션은 적용되지 않습니다.

2. Git Hooks 사용하기

보다 세부적인 권한 설정이 필요한 경우, Git hooks를 사용하여 클론, 체크아웃, 머지 시 자동으로 권한을 설정하는 스크립트를 실행할 수 있습니다. 예를 들어, post-checkoutpost-merge 훅에 스크립트를 추가하여 권한을 설정할 수 있습니다.

#!/bin/sh
# post-checkout or post-merge hook
chmod 755 scripts/*

이 스크립트는 scripts/ 폴더 내의 파일에 실행 권한을 부여합니다. 이 스크립트 파일을 프로젝트의 .git/hooks/post-checkout.git/hooks/post-merge에 저장하고 실행 가능하게 만들어야 합니다.

3. 배포 스크립트에 권한 설정 포함하기

코드 배포 프로세스 중에 권한을 설정하는 단계를 포함시키는 것도 하나의 방법으로 배포를 관리하는 스크립트나 CI/CD 파이프라인에서 처리할 수 있습니다.

# 배포 스크립트 예제
chmod 755 scripts/*
# 코드 배포 로직...

이렇게 하면 배포 시 자동으로 특정 파일이나 폴더에 권한이 설정됩니다.

 

이 방법들을 통해 특정 파일이나 폴더에 대한 권한 관리를 보다 세밀하게 조정할 수 있습니다. 각 방법의 선택은 프로젝트의 요구사항과 환경에 따라 달라질 수 있으니, 상황에 맞게 적절히 선택하는 것이 중요합니다.

 

CI/CD 파이프라인에서 파일 퍼미션을 조정하는 것은 일반적이며, 많은 CI/CD 도구에서 쉽게 구현할 수 있습니다. 이 과정은 배포 단계에서 특정 파일이나 폴더에 적절한 퍼미션을 설정하여 보안 및 실행 권한을 관리하는 데 중요합니다.

 

주로 사용되는 CI/CD 도구인 GitHub Actions와 GitLab CI를 예로 들어 설명하겠습니다.

GitHub Actions

GitHub Actions에서는 워크플로우의 일부로 특정 스크립트를 실행하여 파일 퍼미션을 조정할 수 있습니다.

다음은 GitHub Actions 워크플로우에서 파일 퍼미션을 조정하는 단계의 예입니다.

name: Deploy

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Set file permissions
        run: |
          chmod 755 scripts/*

      - name: Deploy to production
        run: ./deploy_script.sh

이 설정에서는 scripts/ 폴더 내 모든 파일에 실행 권한을 부여하는 스크립트를 실행합니다.

GitLab CI

GitLab CI에서도 유사하게 스테이지를 설정하여 파일 퍼미션을 조정할 수 있습니다.

다음은 GitLab CI 파이프라인의 예입니다.

stages:
  - setup
  - deploy

set-permissions:
  stage: setup
  script:
    - chmod 755 scripts/*
  only:
    - main

deploy:
  stage: deploy
  script:
    - ./deploy_script.sh
  only:
    - main

이 구성에서는 setup 단계에서 scripts/ 폴더 내 모든 파일의 퍼미션을 설정하고, 이후 deploy 단계에서 배포 스크립트를 실행합니다.

Jenkins

Jenkins에서도 스크립트 단계를 추가하여 퍼미션을 조정할 수 있습니다.

Jenkins 파이프라인의 Jenkinsfile에서는 Groovy 스크립트를 사용하여 비슷하게 구성할 수 있습니다.

pipeline {
    agent any
    stages {
        stage('Set Permissions') {
            steps {
                sh 'chmod 755 scripts/*'
            }
        }
        stage('Deploy') {
            steps {
                sh './deploy_script.sh'
            }
        }
    }
}

이러한 방법으로 CI/CD 파이프라인에 파일 퍼미션 조정 단계를 추가하여, 코드가 배포되기 전에 필요한 보안 설정을 적용할 수 있습니다. 각 플랫폼의 구체적인 구성 방법과 옵션은 해당 도구의 문서를 참고하는 것이 좋습니다.

728x90

댓글