dev-> stage-> production에서 마이그레이션 (CMI) 구성을위한 제안 된 워크 플로우는 무엇입니까?


41

몇 달 전에 drupalcamp가 있었고 누군가가 새로운 구성 (CMI) 시스템으로 배포 관리에 대해 물었습니다. 이상적인 워크 플로우 중 하나는 구성을 버전 제어로 유지하고 팀 구성원간에 구성을 마이그레이션 할 수있는 것입니다.

룸에서 우리가 알아낼 수 있었던 최선은 (부분적으로 DrupalCon Portland의 프리젠 테이션을 기반으로) 다음과 같습니다.

  • 활성 구성 디렉토리를 무시하도록 버전 제어에 지시하십시오.
  • 모든 구성을 스테이징 디렉토리에 복사하고 버전 제어를 확약하십시오.

그리고 settings.php를 사용하여 두 환경 사이의 active / staging 디렉토리를 되 돌리십시오. 그러나 한 서버에서 다음 서버로 배포 워크 플로를 파악하는 것은 복잡하지만 실행 가능하지만 여러 로컬 환경 (예 : 여러 개발자)에서 개발자 (또는 서로간에)로 제안 된 워크 플로는 무엇입니까? 동일하거나 유사한 환경을 공유하고 있으므로 한 팀원의 컴퓨터에서 변경 사항이 어떻게 발생합니까?


5
나는 현재의 마지막 투표에 동의하지 않습니다. CMI는 Drupal 8에 중점을 두므로 여기서 좋은 답변을 얻을 수 있다고 생각합니다.
mpdonadio

3
동의, 이것은 매우 좋은 질문입니다. drupal.org/node/1703168 의 중요한 과제 는 이것과 다른 주제에 관한 것이며 아직 완전히 해결되지 않았다고 생각하므로 여기에 대답하면 그 문제를 진전시키는 데 도움이 될 수 있습니다.
Berdir

본인의 질문이 CMI 이니셔티브에 부정적인 영향을 미쳤을 경우 사과드립니다. 더 중립적으로 들리도록 질문을 업데이트했습니다.
btmash

2
나는 거의 "기능을 사용해 보셨습니까?"라고 말할 것입니다. "D8"이 질문 제목에 들어가야할까요? "8"태그는 약간 보이지 않습니다.
donquixote

1
제목을 수정하여 질문을 태그 또는 제목으로 볼 수 있습니다 :)
btmash

답변:


19

CMI 관리자와 조금 이야기를 나눈 후, 최선의 접근 방식에 대한 논의는 끝나지 않았지만 다음은 현재 가장 의미있는 것입니다.

지금은 간결하게 유지하려고하면 질문을 기반으로 확장하려고 시도하고 참조 된 문제가 공식 답변으로 해결 될 때.

먼저, 사실 ...

  • 이미 언급했듯이 활성 및 준비 디렉토리가 있습니다. Active는 Drupal에서 완전히 관리하므로 직접 변경 (다른 위치로 전환하여 직접 또는 간접)하는 것은 지원되지 않습니다.
  • 스테이징은 Drupal이 가져올 구성을 찾고 다른 방법으로는 신경 쓰지 않습니다.
  • 가져 오기 프로세스는 중요하며 구성 변경은 특정 방식으로 사이트에 영향을 줄 수 있으며 유효성을 검사해야합니다. 텍스트 필드의 필드 유형을 작동하지 않는 엔티티 참조로 변경할 수 없습니다.
  • 구성 가져 오기는 항상 모든 구성에서 실행해야 하며 단일보기 또는 노드 유형을 가져올 수 없습니다. 시도되었지만 종속성에 대처하려고 시도하거나 제거하거나 이름을 바꾸는 등의 작업으로 인해 시스템이 매우 복잡해졌으며 작동하지 않았습니다.
  • 기본 구성을 다시 설치하는 유일한 방법은 해당 모듈을 다시 설치하는 것입니다. 즉, 먼저 모든 구성 (예 : 필드) 을 제거 하려고합니다 . 따라서 이것은 실제로 옵션이 아닙니다. 업데이트 기능의 수동, 특정 변경은 가능하지만 너무 지루합니다.
  • 기능 모듈에서 설명한대로, 지속적인 구성 배포가 아니라 재사용 가능한 기능을 제공하는 데 중점을 둘 것입니다. 이것이 처음에 설계된 것입니다.

따라서 스테이징 디렉토리를 버전 제어에 두는 것이 좋습니다. 그런 다음 각 개발자는 전체 활성 디렉토리를 복사하거나 특정 구성 파일을 사용하여 자신이 넣은 내용을 완전히 제어 할 수 있습니다. 그런 다음 스테이징 디렉토리 변경 사항이 커미트되어 프로덕션으로 푸시되고 구성 가져 오기가 실행됩니다 (UI 또는 drush).


버전 제어의 준비 디렉토리는 그 부분을 얻습니다. 다른 부분은 내 마음이 처리하려고하는 것입니다. 따라서 누군가가 변경하면 변경 사항을 스테이징 디렉토리에 복사하고 커밋합니다. 그 후에 다른 개발자 / 다음 서버는 변경 사항을 가져오고 변경 사항을 활성 디렉토리에 동기화합니다. 그리고 다른 서버 체인 (스테이지, 생산 등)을 헹구고 반복하십시오. 그리고 항상 준비 단계를 거치므로 더 이상 디렉토리 전환이 발생하지 않습니다. 정확합니까?
btmash

예. 디렉토리 전환이 없어야합니다. 모든 구성 변경은 가져 오기 프로세스를 거쳐야합니다. 그렇지 않으면 사이트가 손상 될 수 있습니다. 예를 들어, 모듈 목록도 구성입니다. 배포는 모듈을 설치 / 제거해야 함을 의미합니다 (참고 : 아직 작동하지 않지만 문제를 해결하는 데 문제가 있습니다).
Berdir

자, 이제 더 많은 질문이 있습니다 (2 개의 의견으로 나눕니다) :) 먼저 모듈이 구성이라고 언급합니다. 따라서 모듈이 repo에 추가되고 활성화 / 비활성화되지 않은 경우에도 거기에 앉아 설치 / 제거해야합니까?
btmash

그리고 후속 조치 : (A) 활성 디렉토리에서 변경 사항을 복사하는 메커니즘이 있습니다-> 스테이징 (이 구성 요소의 구성 디렉토리에 들어가는 사람을 단순화하기 위해-특정 변수를 선택하는 방법). (B) 스테이징-> 활성화에서 변경 사항이 동기화 된 후 스테이징 디렉토리가 비워 집니까? (B1) 그렇다면, devops 입장의 전략은 git pull 이전에 해당 디렉토리를 재설정하는 것입니까? (B2) 그렇지 않으면 스테이징-> 활성 동기화가 발생하는 동안 변경되지 않은 구성에 영향을 미치지 않아야한다고 가정하는 것이 맞습니까?
btmash

모듈 설치 상태는 구성입니다. 모듈 자체가 아닙니다 :) 그것이 배포하는 것입니다. a) 활성 디렉토리의 tar.gz를 다운로드하는 UI가 있습니다. 하나는 tar.gz를 준비 디렉토리에 업로드하고 다른 하나는 변경 사항의 개요와 차이점을 가지고 실제로 가져 오기를 수행하는 것입니다. B) 지금은 비어 있다고 생각하지만 git으로 쉽게 되돌릴 수 있다고 가정합니다. 확실하지 않고 쉽게 확인할 수 있습니다. 이 모든 것이 플러그 가능하므로 삭제하지 않는 약간 다른 구현이있을 수 있습니다. B2) 나는 이것을 얻지 못하지만 예라고 생각합니다.
Berdir

4

지금까지 큰 대답. 모두 감사합니다!

우리는 최근 Drupal 8 프로젝트를 시작했으며 다음과 같은 워크 플로를 구현했습니다.

준비, 내보내기 및 세 개의 폴더가 활성화되어 있습니다. 개발자는 내보내기 위해 덤프합니다. 스테이징 상태로 유지하고 싶지 않습니다. 공유 구성이 준비 폴더에 직접 저장되지 않은 경우 작업하기가 더 쉽다고 생각합니다. 그것은 단지 벌목입니다. 나는 이것에 대한 어려운 사실이 없습니다 ...

현재 drupal 8 프로젝트 템플릿은 github에서 사용할 수 있습니다. 또한 devleoper worflow 속도를 높이기 위해 편리한 drush 명령을 작성했습니다. 활성에서 내보내기로 수동 복사가 필요하지 않습니다.


1
지금까지 나는이 접근법에 동의한다. 이 게시물의 링크에서 Drush config-export 및 config-import 명령에 모든 기능을 추가했습니다. 나는이 3 디렉토리 솔루션을 탐구하는 사람들이 나와 @florian과 함께하기를 바랍니다.
moshe weitzman

sites/default/files/config_HASH해시 접미사 가있는 구성 폴더를 처리하는 방법 ( 예 : config_wNOLcmycPFZCrXJ9wis9dCdSR4lpYILdBsFxSWuK5Hzhcr
therobyouknow)

@therobyouknow이 폴더의 위치를 ​​무시할 수 있습니다. "사이트 구성 파일의 위치"를 찾으십시오. settings.php에서 다음 스 니펫을 사용합니다. 즉, 구성은 Drupals 루트 디렉토리 외부에 저장됩니다. $ config_directories = array ( 'active'=> '../config/active', 'staging'=> '../config/staging',);
webflo

감사합니다 @webflo 이걸 보았습니다. 코드베이스와 구성을 별도로 관리하면 어떤 이점이 있습니까? 코드와 구성 (yaml)이 동작을 결정하고 서로 의존적 이므로이 분리는 약간 인공적이라고 생각합니다. Drupal 7에서는 코드에서 추적해야하는 각 특정 구성에 대한 모듈을 작성하는 기능 모듈을 사용하여 코드에서 구성 (또는 Git에서 추적 가능)을 수행했습니다. Drupal 8에는 Features 3.x가 있습니다. 이해하지만 YAML을 사용하여 구성을 저장하고 생성 된 모듈은 Features 모듈에 의존하지 않습니다.
therobyouknow

나는 당신이 나를 잘못 이해했다고 생각한다 .config 디렉토리는 여전히 git에 있지만 내 Drupal 사이트는 git repo 루트에 없다. 사이트는 / web에 저장됩니다. 따라서 / config와 / web은 같은 수준에 있습니다.
webflo

2

나는 이것을 시도하지 않았지만, 나의 계획은 내가 관심있는 구성만을 포함하는 "기본"구성 파일을 포함하는 사용자 정의 모듈을 만드는 것입니다. 다른 모듈에는 다른 모듈을 무시하는 구성이 포함될 수 있다고 생각합니다. (그렇지 않으면 가능해야합니다).

config 폴더를 그대로 두어야한다고 생각합니다. 무시해. 설치시 모든 개별 모듈의 구성 파일에서 자동으로 생성됩니다. 길은 길고 무작위입니다. 이 모든 것을 저장소에 보관했다면 별도의 저장소가 필요하고 불필요한 기본 구성 파일 톤을 가지고 다닐 것입니다.

사용자 정의 모듈에 구성을 넣으면 기본 코드베이스의 일부가됩니다.

배포 프로세스는 다음과 같습니다.

  1. 힘내거나 새 파일을 얻으려면 무엇이든하십시오.
  2. 캐시를 비 웁니다.
  3. 기본 구성을 재설정하십시오. (사용자 정의 모듈 파일에서)

원하는 경우 각 환경에 대해 고유 한 구성으로 사용자 정의 모듈을 작성할 수 있습니다.


이것은 기능과 같은 것 같지 않습니까? 아니면 내가 놓친 큰 차이가 있습니까?
Letharion

흥미로운 접근 방식이며 아이디어가 마음에 듭니다. 그러나 CMI 이니셔티브의 일부로 언급 된 가장 큰 장점 중 하나는 구성 디렉토리에서 구성을 이동할 수 있다는 것입니다. 그리고 내가 보는 것에서 settings.php 파일을 사용하면 활성 / 준비 디렉토리의 위치를 ​​지정 할 수 있습니다 (즉, 자동 생성 경로 일 필요는 없습니다). 따라서 @Letharion에서 언급 한 것처럼 기능을 만들 필요없이 현재 구성의 워크 플로우가 가능해야한다고 생각합니다.
btmash

2

참고 : 이 질문과 관련하여 가장 엄격한 의미의 답변은 아니지만 감사합니다. 어쨌든 여기에 넣고 기능이 8.x 릴리스이고 먼지가 있으면 다시 방문하고 편집 / 삭제합니다. 조금 더 정착했습니다. 이것은 의견에 비해 너무 컸으며 :-) 내 £ 0.02를 얻고 싶었습니다.

Features의 열렬한 팬으로서 Features 모듈의 D8 화신을 주시하는 것이 좋습니다 .

프로젝트 페이지에서 가져온

Drupal 8의 새로운 기능은 3.x 버전의 새로운 구성 관리 시스템과 통합 될 예정입니다. 단순 사이트 구성 만 내 보내야하는 경우 기능 대신 D8 구성 관리 시스템을 사용해야합니다. D8의 기능을 사용하여 번들 된 기능 (예 : "사진 갤러리 기능")을 내 보냅니다.

내가 방법 볼이 생각 dev에 대한 더 쉽게 만드는 것입니다 사이트의 작은 부분에서 작동합니다. 아직 알 수없는 변수가 너무 많아서 아직 워크 플로에 들어 가지 않겠지 만 현재 기능 배포 절차와 크게 다른 것을 볼 수는 없습니다.

CMI는 굉장합니다. 그러나 대부분의 사이트는 여전히 기능 모듈로 끝납니다 (모든 컨텐츠 유형, 권한 등을 내보낼 필요가 없기 때문에 적은 양이지만)


기능이 역할을 약간 변경하고 (구성원이 언급 한 사진 갤러리 기능과 같이) 구성 구성 요소를 함께 묶는 도구가 될 것이라는 데 동의하지만 구성은 (내가 이해하는 한) 여전히 활성을 통해 유지됩니다 구성 디렉토리. 따라서 기능은 특정 구성 요소를 해결할 수 있지만 환경 전체에서 구성 디렉토리 워크 플로우를 관리하는 방법은 실제 문제입니다. ActiveStore 데이터는 db에 있고 datastore는 파일이므로 배포 절차는 현재 기능 배포 절차와 약간 다릅니다.
btmash

... d7 기능 배포 절차에는 데이터베이스의 활성 저장소 데이터와 파일의 데이터 저장소가 포함됩니다. 우리는 파일로 전환하고 있으며 이것이 워크 플로의 변화에 ​​어떤 영향을 미치는지 확인해야합니다.
btmash

기능에는 실제로 활성 및 데이터 스토어 / 스테이징 개념이 없습니다. 또는 적어도 일관성이 없다면, 그것은 모두 특정 후크 / 통합 대상에 달려 있습니다. 예를 들어, 기본보기는 변경 사항이 즉시 활성화되고 (캐싱 제외) 기능이있는 제어 된 배포 프로세스가 없습니다. 이는 배포 기능을 사용할 때 항상 주요 문제 중 하나였습니다.
Berdir

네가 옳아. D7의 구성 모듈이 기능과 어떻게 혼합되어 있는지 모르겠지만 그랬습니다.
btmash
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.