Como gerenciar efetivamente um site com o Drush make?

16

O que é importante considerar ao gerenciar um site usando o Drush make ?

Letharion
fonte

Respostas:

29

"Criar arquivos", no contexto Drush e Drupal, define um conjunto de módulos, temas e bibliotecas que compõem um site. Embora se possa colocar todo o diretório sites / all / modules no git, o arquivo make é muito mais rápido de manusear, tanto para o git quanto para os desenvolvedores. Abaixo está um arquivo make de um projeto real meu. Recortei bastante, pois o arquivo inteiro tem centenas de linhas, mas retive o suficiente para mostrar todas as funcionalidades que usei.

; API
api = 2

; Core
core = 7.x
projects[drupal][version] = 7.14

; Contrib modules
projects[date][version] = 2.0-alpha4
projects[email][version] = 1.0

; Media and file_entity go hand in hand - please make sure they work together.
projects[media][version] = 2.0-unstable5
projects[file_entity][version] = 2.0-unstable5

; Cron modules
projects[ultimate_cron][version] = 1.6
projects[background_process][version] = 1.12

; Performance modules
projects[expire][version] = 1.0-alpha2
projects[cache_actions][version] = 2.0-alpha3

; Unstable modules
projects[menu_node_views][type] = module
projects[menu_node_views][download][type] = git
projects[menu_node_views][download][url] = http://git.drupal.org/project/menu_node_views.git
projects[menu_node_views][download][revision] = f46dd41eb8c4e693a6642a6c461afa57d99a6f1b

projects[filefield_sources_plupload][type] = module
projects[filefield_sources_plupload][download][type] = git
projects[filefield_sources_plupload][download][url] = http://git.drupal.org/project/filefield_sources_plupload.git
projects[filefield_sources_plupload][download][revision] = da374770b80fcbc0dab17158d38c8436ef29caca

projects[menu_token][type] = module
projects[menu_token][download][type] = git
projects[menu_token][download][url] = http://git.drupal.org/project/menu_token.git
projects[menu_token][download][revision] = 8c18fbb

; Libraries
libraries[mediaelement][download][type] = "file"
libraries[mediaelement][download][url] = "https://github.com/johndyer/mediaelement/zipball/2.7.0"

; Patches

; #1491150: node_load in menu_node_menu_link_insert is not safe - http://drupal.org/node/1491150
projects[menu_node][patch][] = http://drupal.org/files/menu_node-node_load-in-menu_node_menu_link_insert-1491150-1.patch

; Fix rendering of relation endpoints
projects[relation][patch][] = http://drupal.org/files/relation_table_endpoints_break.patch
projects[relation][patch][] = http://drupal.org/files/relation_bundle_permissions.patch

libraries[jquery-json-min][download][type] = "file"
libraries[jquery-json-min][download][url] = "http://jquery-json.googlecode.com/files/jquery.json-2.3.min.js"
libraries[jquery-json-min][download][sha1] = "2a4615b93c65dd50f92117c570121035a0327fee"
libraries[jquery-json-min][destination] = "libraries/jquery-json"

A linha api define qual Drush cria a API a ser usada para o restante do arquivo. Uma coisa importante a ser observada sobre o arquivo é que todos os módulos possuem uma versão específica ou apontam para um commit git específico. Nós nunca temos versões -dev em nossos arquivos. Quando comparecemos em uma reunião de clientes ou entregamos o arquivo make ao servidor Jenkins , nunca deve haver surpresas. A versão exata incluída no arquivo deve ser testada e deve passar em todos os tipos de testes. Isso é importante para poder oferecer algo de alta qualidade.

Na minha empresa, o acordo geral é que toda equipe fornece um shell-script chamado "build", na raiz do repositório, responsável pela configuração do site, para que testes automatizados possam ser executados pela mesma equipe cruzada Configuração do IC.

As atualizações do módulo podem ser feitas rapidamente diretamente nos sites para teste, mas oficialmente atualizando o arquivo make e reconstruindo o site.

Atualmente, minha equipe usa esse conjunto de scripts de construção . Estou trabalhando para mover grande parte da funcionalidade para uma extensão drush que usará fortemente a provisão. Uma versão CLI do Aegir, se desejar.

Letharion
fonte
1
Gênio. Obrigado por dedicar um tempo para escrever isso, é muito útil
Clive
Sim, concordo com o Clive, votando positivamente como um post muito útil. Estou interessado em não ter que instalar repetidamente o mesmo conjunto de módulos e patches. @ Letharion Gostaria de receber calorosamente se você pudesse elaborar um dia sobre como proceder com isso. Você o instala localmente ou no servidor remoto?
Artur
1
Brincando com drush make. Entendo perfeitamente o motivo de colocar números de versão fixos lá. No entanto, como você os atualiza? Existe um drush equivalente a drush up? Em algum momento, você precisa atualizar suas versões para a versão mais recente (principalmente atualizações de segurança). Ter que fazer isso manualmente com dezenas de módulos parece um pouco entediante ...
Berdir
1
Perguntas sobre Moar: Você tem um arquivo .gitignore ou como evitar o envio de arquivos "marcados"? Se sim, como é isso? Tentei fazer algo chique com curinga e! mas isso não funciona para diretórios.
Berdir
1
Eu realmente não concordo. A falta de -dev é o que garante consistência, e não o contrário. É responsabilidade de cada desenvolvedor garantir que o patch se aplique, o que pode significar se referir a uma revisão git em vez de uma versão estável, mas nunca a um imprevisível -ev que pode mudar de um build para outro.
Letharion