diff --git a/ahoy.drush.yml b/ahoy.drush.yml index 91a513d5fe4987eec40261e637e604281cfdf8b0..3d6f7e5fb8c8764b23cf5ae978e91746334abc66 100644 --- a/ahoy.drush.yml +++ b/ahoy.drush.yml @@ -8,6 +8,7 @@ commands: docker-compose exec --user root php drush sql:sync --create-db @default.live @default.dev docker-compose exec --user root php drush @default.dev cr docker-compose exec --user root php drush @default.dev dev on + docker-compose exec --user root php drush @default.dev cim --partial --source=/var/www/html/config/default/environments/develop docker-compose exec --user root php drush rsync @default.live:%files/ @default.dev:%files -- --chown=www-data:www-data --safe-links --max-size=20M usage: Pull files and DB from live site pull-sql: @@ -15,6 +16,7 @@ commands: docker-compose exec --user root php drush sql:sync --create-db @default.live @default.dev docker-compose exec --user root php drush @default.dev cr docker-compose exec --user root php drush @default.dev dev on + docker-compose exec --user root php drush @default.dev cim --partial --source=/var/www/html/config/default/environments/develop usage: Pull DB from live site pull-files: cmd: | diff --git a/composer.json b/composer.json index 5f21f31adbf59a0d03190a4d092353e9e4ffe686..4c165ecab3bea9a03775eb7aa9f6c5d7bb78cff2 100644 --- a/composer.json +++ b/composer.json @@ -24,6 +24,7 @@ "source": "https://gitlab.lakedrops.com/composer/plugin/docker4drupal/tree/master" }, "require": { + "ext-json": "*", "php": ">=5.6", "composer-plugin-api": "^1.0.0", "lakedrops/composer-scripts": "^1.1.0", diff --git a/src/Handler.php b/src/Handler.php index 7e1cb6a0ce7594dd51779373b4a0adb1d1bfb11e..98b30807b7a78d08aef73da3a63ac788a70a1afd 100644 --- a/src/Handler.php +++ b/src/Handler.php @@ -210,6 +210,7 @@ class Handler extends BaseHandler { $extra = $this->composer->getPackage()->getExtra() + ['docker4drupal' => []]; $options = NestedArray::mergeDeep([ 'projectname' => $projectname, + 'ci_home' => '/home/gitlab-runner', 'docker0' => [ 'ip' => $this->getLocalIpv4('docker0'), ], @@ -286,6 +287,16 @@ class Handler extends BaseHandler { 'enable' => 0, ], ], $extra['docker4drupal']); + + $projectRoot = getenv('CI_PROJECT_DIR'); + if (empty($projectRoot)) { + $projectRoot = getcwd(); + } + else { + $projectRoot = $this->getDockerMountSource($projectRoot); + } + $options['projectroot'] = $projectRoot; + $this->options = $env->replaceEnvironmentVariables($options); } if ($key !== NULL) { @@ -326,4 +337,29 @@ class Handler extends BaseHandler { return isset($local_addrs[$interface]) ? $local_addrs[$interface] : '127.0.0.1'; } + /** + * @param $projectRoot + * + * @return string + */ + private function getDockerMountSource($projectRoot) { + try { + $output = []; + exec('basename "$(cat /proc/1/cpuset)"', $output); + $id = reset($output); + $output = []; + exec('docker container inspect ' . $id, $output); + $container = json_decode(implode('', $output), TRUE)[0]; + foreach ($container['Mounts'] as $mount) { + if (strpos($projectRoot, $mount['Destination']) === 0) { + return $mount['Source'] . substr($projectRoot, strlen($mount['Destination'])); + } + } + } + catch (\Exception $ex) { + // Ignore. + } + return getcwd(); + } + } diff --git a/templates/docker-compose.yml.twig b/templates/docker-compose.yml.twig index 8a7421dbc90d0a6ea3bf5424e2934c6c390eaab0..2bdcaa3c674c47a35ad414f99ebeb570d04f9045 100644 --- a/templates/docker-compose.yml.twig +++ b/templates/docker-compose.yml.twig @@ -18,6 +18,7 @@ services: DB_PASSWORD: drupal DB_NAME: drupal DB_DRIVER: mysql + COMPOSER_ALLOW_SUPERUSER: 1 {% if php.xdebug %} PHP_XDEBUG: 1 PHP_XDEBUG_DEFAULT_ENABLE: 1 @@ -41,8 +42,8 @@ services: SSH_AUTH_SOCK: /ssh-agent {% endif %} volumes: - - ./:/var/www/html - - ./drush:/etc/drush + - {{ projectroot }}:/var/www/html + - {{ projectroot }}/drush:/etc/drush {% if php.ssh %} - $SSH_AUTH_SOCK:/ssh-agent {% endif %} @@ -77,7 +78,7 @@ services: {{ webserver.type|upper }}_BACKEND_HOST: php {{ webserver.type|upper }}_SERVER_ROOT: /var/www/html/{{ webRoot }} volumes: - - ./:/var/www/html + - {{ projectroot }}:/var/www/html labels: traefik.backend: '{{ projectname }}_{{ webserver.type }}_1' traefik.port: '80' @@ -153,7 +154,7 @@ services: traefik.port: '8080' traefik.frontend.rule: 'Host:nodejs.{{ projectname }}.docker.localhost' volumes: - - ./{{ node.path }}:/app + - {{ projectroot }}/{{ node.path }}:/app command: sh -c 'npm install && npm run start' node: @@ -166,7 +167,7 @@ services: expose: - '3000' volumes: - - ./{{ node.path }}:/app + - {{ projectroot }}/{{ node.path }}:/app command: sh -c 'npm install && npm run start' {% endif %} {% if memcached.enable %} @@ -211,7 +212,7 @@ services: traefik.port: '8080' traefik.frontend.rule: 'Host:webgrind.{{ projectname }}.docker.localhost' volumes: - - files:/mnt/files + - {{ projectroot }}/files:/mnt/files {% endif %} hub: