deployphp /
deployer
| 1 | <?php |
||
| 2 | |||
| 3 | namespace Deployer; |
||
| 4 | |||
| 5 | require_once __DIR__ . '/common.php'; |
||
| 6 | require_once __DIR__ . '/../contrib/cachetool.php'; |
||
| 7 | |||
| 8 | use Deployer\Exception\ConfigurationException; |
||
| 9 | use Deployer\Exception\GracefulShutdownException; |
||
| 10 | use Deployer\Exception\RunException; |
||
| 11 | use Deployer\Host\Host; |
||
| 12 | |||
| 13 | const CONFIG_IMPORT_NEEDED_EXIT_CODE = 2; |
||
| 14 | const DB_UPDATE_NEEDED_EXIT_CODE = 2; |
||
| 15 | const MAINTENANCE_MODE_ACTIVE_OUTPUT_MSG = 'maintenance mode is active'; |
||
| 16 | const ENV_CONFIG_FILE_PATH = 'app/etc/env.php'; |
||
| 17 | const TMP_ENV_CONFIG_FILE_PATH = 'app/etc/env_tmp.php'; |
||
| 18 | |||
| 19 | add('recipes', ['magento2']); |
||
| 20 | |||
| 21 | // Configuration |
||
| 22 | |||
| 23 | // By default setup:static-content:deploy uses `en_US`. |
||
| 24 | // To change that, simply put `set('static_content_locales', 'en_US de_DE');` |
||
| 25 | // in you deployer script. |
||
| 26 | set('static_content_locales', 'en_US'); |
||
| 27 | |||
| 28 | // Configuration |
||
| 29 | |||
| 30 | // You can also set the themes to run against. By default it'll deploy |
||
| 31 | // all themes - `add('magento_themes', ['Magento/luma', 'Magento/backend']);` |
||
| 32 | // If the themes are set as a simple list of strings, then all languages defined in {{static_content_locales}} are |
||
| 33 | // compiled for the given themes. |
||
| 34 | // Alternatively The themes can be defined as an associative array, where the key represents the theme name and |
||
| 35 | // the key contains the languages for the compilation (for this specific theme) |
||
| 36 | // Example: |
||
| 37 | // set('magento_themes', ['Magento/luma']); - Will compile this theme with every language from {{static_content_locales}} |
||
| 38 | // set('magento_themes', [ |
||
| 39 | // 'Magento/luma' => null, - Will compile all languages from {{static_content_locales}} for Magento/luma |
||
| 40 | // 'Custom/theme' => 'en_US fr_FR' - Will compile only en_US and fr_FR for Custom/theme |
||
| 41 | // 'Custom/another' => '{{static_content_locales}} it_IT' - Will compile all languages from {{static_content_locales}} + it_IT for Custom/another |
||
| 42 | // ]); - Will compile this theme with every language |
||
| 43 | set('magento_themes', [ |
||
| 44 | |||
| 45 | ]); |
||
| 46 | |||
| 47 | // Static content deployment options, e.g. '--no-parent' |
||
| 48 | set('static_deploy_options', ''); |
||
| 49 | |||
| 50 | // Deploy frontend and adminhtml together as default |
||
| 51 | set('split_static_deployment', false); |
||
| 52 | |||
| 53 | // Use the default languages for the backend as default |
||
| 54 | set('static_content_locales_backend', '{{static_content_locales}}'); |
||
| 55 | |||
| 56 | // backend themes to deploy. Only used if split_static_deployment=true |
||
| 57 | // This setting supports the same options/structure as {{magento_themes}} |
||
| 58 | set('magento_themes_backend', ['Magento/backend' => null]); |
||
| 59 | |||
| 60 | // Configuration |
||
| 61 | |||
| 62 | // Also set the number of concurrent jobs to run. The default is 1 |
||
| 63 | // Update using: `set('static_content_jobs', '1');` |
||
| 64 | set('static_content_jobs', '1'); |
||
| 65 | |||
| 66 | set('content_version', function () { |
||
| 67 | return time(); |
||
| 68 | }); |
||
| 69 | |||
| 70 | // Magento directory relative to repository root. Use "." (default) if it is not located in a subdirectory |
||
| 71 | set('magento_dir', '.'); |
||
| 72 | |||
| 73 | |||
| 74 | set('shared_files', [ |
||
| 75 | '{{magento_dir}}/app/etc/env.php', |
||
| 76 | '{{magento_dir}}/var/.maintenance.ip', |
||
| 77 | ]); |
||
| 78 | set('shared_dirs', [ |
||
| 79 | '{{magento_dir}}/var/composer_home', |
||
| 80 | '{{magento_dir}}/var/log', |
||
| 81 | '{{magento_dir}}/var/export', |
||
| 82 | '{{magento_dir}}/var/report', |
||
| 83 | '{{magento_dir}}/var/import', |
||
| 84 | '{{magento_dir}}/var/import_history', |
||
| 85 | '{{magento_dir}}/var/session', |
||
| 86 | '{{magento_dir}}/var/importexport', |
||
| 87 | '{{magento_dir}}/var/backups', |
||
| 88 | '{{magento_dir}}/var/tmp', |
||
| 89 | '{{magento_dir}}/pub/sitemap', |
||
| 90 | '{{magento_dir}}/pub/media', |
||
| 91 | '{{magento_dir}}/pub/static/_cache', |
||
| 92 | ]); |
||
| 93 | set('writable_dirs', [ |
||
| 94 | '{{magento_dir}}/var', |
||
| 95 | '{{magento_dir}}/pub/static', |
||
| 96 | '{{magento_dir}}/pub/media', |
||
| 97 | '{{magento_dir}}/generated', |
||
| 98 | '{{magento_dir}}/var/page_cache', |
||
| 99 | ]); |
||
| 100 | set('clear_paths', [ |
||
| 101 | '{{magento_dir}}/generated/*', |
||
| 102 | '{{magento_dir}}/pub/static/_cache/*', |
||
| 103 | '{{magento_dir}}/var/generation/*', |
||
| 104 | '{{magento_dir}}/var/cache/*', |
||
| 105 | '{{magento_dir}}/var/page_cache/*', |
||
| 106 | '{{magento_dir}}/var/view_preprocessed/*', |
||
| 107 | ]); |
||
| 108 | |||
| 109 | set('bin/magento', '{{release_or_current_path}}/{{magento_dir}}/bin/magento'); |
||
| 110 | |||
| 111 | set('magento_version', function () { |
||
| 112 | // detect version |
||
| 113 | $versionOutput = run('{{bin/php}} {{bin/magento}} --version'); |
||
| 114 | preg_match('/(\d+\.?)+(-p\d+)?$/', $versionOutput, $matches); |
||
| 115 | return $matches[0] ?? '2.0'; |
||
| 116 | }); |
||
| 117 | |||
| 118 | set('config_import_needed', function () { |
||
| 119 | // detect if app:config:import is needed |
||
| 120 | try { |
||
| 121 | run('{{bin/php}} {{bin/magento}} app:config:status'); |
||
| 122 | } catch (RunException $e) { |
||
| 123 | if ($e->getExitCode() == CONFIG_IMPORT_NEEDED_EXIT_CODE) { |
||
| 124 | return true; |
||
| 125 | } |
||
| 126 | |||
| 127 | throw $e; |
||
| 128 | } |
||
| 129 | return false; |
||
| 130 | }); |
||
| 131 | |||
| 132 | set('database_upgrade_needed', function () { |
||
| 133 | // detect if setup:upgrade is needed |
||
| 134 | try { |
||
| 135 | run('{{bin/php}} {{bin/magento}} setup:db:status'); |
||
| 136 | } catch (RunException $e) { |
||
| 137 | if ($e->getExitCode() == DB_UPDATE_NEEDED_EXIT_CODE) { |
||
| 138 | return true; |
||
| 139 | } |
||
| 140 | |||
| 141 | throw $e; |
||
| 142 | } |
||
| 143 | |||
| 144 | return false; |
||
| 145 | }); |
||
| 146 | |||
| 147 | // Deploy without setting maintenance mode if possible |
||
| 148 | set('enable_zerodowntime', true); |
||
| 149 | |||
| 150 | // Tasks |
||
| 151 | |||
| 152 | // To work correctly with artifact deployment, it is necessary to set the MAGE_MODE correctly in `app/etc/config.php` |
||
| 153 | // e.g. |
||
| 154 | // ```php |
||
| 155 | // 'MAGE_MODE' => 'production' |
||
| 156 | // ``` |
||
| 157 | desc('Compiles magento di'); |
||
| 158 | task('magento:compile', function () { |
||
| 159 | run("{{bin/php}} {{bin/magento}} setup:di:compile"); |
||
| 160 | run('cd {{release_or_current_path}}/{{magento_dir}} && {{bin/composer}} dump-autoload -o'); |
||
| 161 | }); |
||
| 162 | |||
| 163 | // To work correctly with artifact deployment it is necessary to set `system/dev/js` , `system/dev/css` and `system/dev/template` |
||
| 164 | // in `app/etc/config.php`, e.g.: |
||
| 165 | // ```php |
||
| 166 | // 'system' => [ |
||
| 167 | // 'default' => [ |
||
| 168 | // 'dev' => [ |
||
| 169 | // 'js' => [ |
||
| 170 | // 'merge_files' => '1', |
||
| 171 | // 'minify_files' => '1' |
||
| 172 | // ], |
||
| 173 | // 'css' => [ |
||
| 174 | // 'merge_files' => '1', |
||
| 175 | // 'minify_files' => '1' |
||
| 176 | // ], |
||
| 177 | // 'template' => [ |
||
| 178 | // 'minify_html' => '1' |
||
| 179 | // ] |
||
| 180 | // ] |
||
| 181 | // ] |
||
| 182 | // ``` |
||
| 183 | desc('Deploys assets'); |
||
| 184 | task('magento:deploy:assets', function () { |
||
| 185 | $themesToCompile = ''; |
||
| 186 | if (get('split_static_deployment')) { |
||
| 187 | invoke('magento:deploy:assets:adminhtml'); |
||
| 188 | invoke('magento:deploy:assets:frontend'); |
||
| 189 | } else { |
||
| 190 | if (count(get('magento_themes')) > 0) { |
||
| 191 | $themes = array_is_list(get('magento_themes')) ? get('magento_themes') : array_keys(get('magento_themes')); |
||
| 192 | foreach ($themes as $theme) { |
||
| 193 | $themesToCompile .= ' -t ' . $theme; |
||
| 194 | } |
||
| 195 | } |
||
| 196 | run("{{bin/php}} {{release_or_current_path}}/bin/magento setup:static-content:deploy -f --content-version={{content_version}} {{static_deploy_options}} {{static_content_locales}} $themesToCompile -j {{static_content_jobs}}"); |
||
| 197 | } |
||
| 198 | }); |
||
| 199 | |||
| 200 | desc('Deploys assets for backend only'); |
||
| 201 | task('magento:deploy:assets:adminhtml', function () { |
||
| 202 | magentoDeployAssetsSplit('backend'); |
||
| 203 | }); |
||
| 204 | |||
| 205 | desc('Deploys assets for frontend only'); |
||
| 206 | task('magento:deploy:assets:frontend', function () { |
||
| 207 | magentoDeployAssetsSplit('frontend'); |
||
| 208 | }); |
||
| 209 | |||
| 210 | /** |
||
| 211 | * @phpstan-param 'frontend'|'backend' $area |
||
| 212 | * |
||
| 213 | * @throws ConfigurationException |
||
| 214 | */ |
||
| 215 | function magentoDeployAssetsSplit(string $area) |
||
| 216 | { |
||
| 217 | if (!in_array($area, ['frontend', 'backend'], true)) { |
||
| 218 | throw new ConfigurationException("\$area must be either 'frontend' or 'backend', '$area' given"); |
||
| 219 | } |
||
| 220 | |||
| 221 | $isFrontend = $area === 'frontend'; |
||
| 222 | $suffix = $isFrontend |
||
| 223 | ? '' |
||
| 224 | : '_backend'; |
||
| 225 | |||
| 226 | $themesConfig = get("magento_themes$suffix"); |
||
| 227 | $defaultLanguages = get("static_content_locales$suffix"); |
||
| 228 | $useDefaultLanguages = array_is_list($themesConfig); |
||
| 229 | |||
| 230 | /** @var list<string> $themes */ |
||
| 231 | $themes = $useDefaultLanguages |
||
| 232 | ? array_values($themesConfig) |
||
| 233 | : array_keys($themesConfig); |
||
| 234 | |||
| 235 | $staticContentArea = $isFrontend |
||
| 236 | ? 'frontend' |
||
| 237 | : 'adminhtml'; |
||
| 238 | |||
| 239 | if ($useDefaultLanguages) { |
||
| 240 | $themes = '-t ' . implode(' -t ', $themes); |
||
|
0 ignored issues
–
show
Bug
introduced
by
Loading history...
|
|||
| 241 | |||
| 242 | run("{{bin/php}} {{bin/magento}} setup:static-content:deploy -f --area=$staticContentArea --content-version={{content_version}} {{static_deploy_options}} $defaultLanguages $themes -j {{static_content_jobs}}"); |
||
| 243 | return; |
||
| 244 | } |
||
| 245 | |||
| 246 | foreach ($themes as $theme) { |
||
| 247 | $languages = parse($themesConfig[$theme] ?? $defaultLanguages); |
||
| 248 | |||
| 249 | run("{{bin/php}} {{bin/magento}} setup:static-content:deploy -f --area=$staticContentArea --content-version={{content_version}} {{static_deploy_options}} $languages -t $theme -j {{static_content_jobs}}"); |
||
| 250 | } |
||
| 251 | } |
||
| 252 | |||
| 253 | desc('Syncs content version'); |
||
| 254 | task('magento:sync:content_version', function () { |
||
| 255 | $timestamp = time(); |
||
| 256 | on(select('all'), function (Host $host) use ($timestamp) { |
||
| 257 | $host->set('content_version', $timestamp); |
||
| 258 | }); |
||
| 259 | })->once(); |
||
| 260 | |||
| 261 | before('magento:deploy:assets', 'magento:sync:content_version'); |
||
| 262 | |||
| 263 | desc('Enables maintenance mode'); |
||
| 264 | task('magento:maintenance:enable', function () { |
||
| 265 | // do not use {{bin/magento}} because it would be in "release" but the maintenance mode must be set in "current" |
||
| 266 | run("if [ -d $(echo {{current_path}}) ]; then {{bin/php}} {{current_path}}/{{magento_dir}}/bin/magento maintenance:enable; fi"); |
||
| 267 | }); |
||
| 268 | |||
| 269 | desc('Disables maintenance mode'); |
||
| 270 | task('magento:maintenance:disable', function () { |
||
| 271 | // do not use {{bin/magento}} because it would be in "release" but the maintenance mode must be set in "current" |
||
| 272 | run("if [ -d $(echo {{current_path}}) ]; then {{bin/php}} {{current_path}}/{{magento_dir}}/bin/magento maintenance:disable; fi"); |
||
| 273 | }); |
||
| 274 | |||
| 275 | desc('Set maintenance mode if needed'); |
||
| 276 | task('magento:maintenance:enable-if-needed', function () { |
||
| 277 | ! get('enable_zerodowntime') || get('database_upgrade_needed') || get('config_import_needed') ? |
||
| 278 | invoke('magento:maintenance:enable') : |
||
| 279 | writeln('Config and database up to date => no maintenance mode'); |
||
| 280 | }); |
||
| 281 | |||
| 282 | desc('Config Import'); |
||
| 283 | task('magento:config:import', function () { |
||
| 284 | if (get('config_import_needed')) { |
||
| 285 | run('{{bin/php}} {{bin/magento}} app:config:import --no-interaction'); |
||
| 286 | } else { |
||
| 287 | writeln('App config is up to date => import skipped'); |
||
| 288 | } |
||
| 289 | }); |
||
| 290 | |||
| 291 | desc('Upgrades magento database'); |
||
| 292 | task('magento:upgrade:db', function () { |
||
| 293 | if (get('database_upgrade_needed')) { |
||
| 294 | run("{{bin/php}} {{bin/magento}} setup:db-schema:upgrade --no-interaction"); |
||
| 295 | run("{{bin/php}} {{bin/magento}} setup:db-data:upgrade --no-interaction"); |
||
| 296 | } else { |
||
| 297 | writeln('Database schema is up to date => upgrade skipped'); |
||
| 298 | } |
||
| 299 | })->once(); |
||
| 300 | |||
| 301 | desc('Flushes Magento Cache'); |
||
| 302 | task('magento:cache:flush', function () { |
||
| 303 | run("{{bin/php}} {{bin/magento}} cache:flush"); |
||
| 304 | }); |
||
| 305 | |||
| 306 | desc('Magento2 deployment operations'); |
||
| 307 | task('deploy:magento', [ |
||
| 308 | 'magento:build', |
||
| 309 | 'magento:maintenance:enable-if-needed', |
||
| 310 | 'magento:config:import', |
||
| 311 | 'magento:upgrade:db', |
||
| 312 | 'magento:maintenance:disable', |
||
| 313 | ]); |
||
| 314 | |||
| 315 | desc('Magento2 build operations'); |
||
| 316 | task('magento:build', [ |
||
| 317 | 'magento:compile', |
||
| 318 | 'magento:deploy:assets', |
||
| 319 | ]); |
||
| 320 | |||
| 321 | desc('Deploys your project'); |
||
| 322 | task('deploy', [ |
||
| 323 | 'deploy:prepare', |
||
| 324 | 'deploy:vendors', |
||
| 325 | 'deploy:clear_paths', |
||
| 326 | 'deploy:magento', |
||
| 327 | 'deploy:publish', |
||
| 328 | ]); |
||
| 329 | |||
| 330 | after('deploy:symlink', 'magento:cache:flush'); |
||
| 331 | |||
| 332 | after('deploy:failed', 'magento:maintenance:disable'); |
||
| 333 | |||
| 334 | // Artifact deployment section |
||
| 335 | |||
| 336 | // The file the artifact is saved to |
||
| 337 | set('artifact_file', 'artifact.tar.gz'); |
||
| 338 | |||
| 339 | // The directory the artifact is saved in |
||
| 340 | set('artifact_dir', 'artifacts'); |
||
| 341 | |||
| 342 | // Points to a file with a list of files to exclude from packaging. |
||
| 343 | // The format is as with the `tar --exclude-from=[file]` option |
||
| 344 | set('artifact_excludes_file', 'artifacts/excludes'); |
||
| 345 | |||
| 346 | // If set to true, the artifact is built from a clean copy of the project repository instead of the current working directory |
||
| 347 | set('build_from_repo', false); |
||
| 348 | |||
| 349 | // Set this value if "build_from_repo" is set to true. The target to deploy must also be set with "--branch", "--tag" or "--revision" |
||
| 350 | set('repository', null); |
||
| 351 | |||
| 352 | // The relative path to the artifact file. If the directory does not exist, it will be created |
||
| 353 | set('artifact_path', function () { |
||
| 354 | if (!testLocally('[ -d {{artifact_dir}} ]')) { |
||
| 355 | runLocally('mkdir -p {{artifact_dir}}'); |
||
| 356 | } |
||
| 357 | return get('artifact_dir') . '/' . get('artifact_file'); |
||
| 358 | }); |
||
| 359 | |||
| 360 | // The location of the tar command. On MacOS you should have installed gtar, as it supports the required settings |
||
| 361 | set('bin/tar', function () { |
||
| 362 | if (commandExist('gtar')) { |
||
| 363 | return which('gtar'); |
||
| 364 | } else { |
||
| 365 | return which('tar'); |
||
| 366 | } |
||
| 367 | }); |
||
| 368 | |||
| 369 | // tasks section |
||
| 370 | |||
| 371 | desc('Packages all relevant files in an artifact.'); |
||
| 372 | task('artifact:package', function () { |
||
| 373 | if (!test('[ -f {{artifact_excludes_file}} ]')) { |
||
| 374 | throw new GracefulShutdownException( |
||
| 375 | "No artifact excludes file provided, provide one at artifacts/excludes or change location", |
||
| 376 | ); |
||
| 377 | } |
||
| 378 | run('{{bin/tar}} --exclude-from={{artifact_excludes_file}} -czf {{artifact_path}} -C {{release_or_current_path}} .'); |
||
| 379 | }); |
||
| 380 | |||
| 381 | desc('Uploads artifact in release folder for extraction.'); |
||
| 382 | task('artifact:upload', function () { |
||
| 383 | upload(get('artifact_path'), '{{release_path}}'); |
||
| 384 | }); |
||
| 385 | |||
| 386 | desc('Extracts artifact in release path.'); |
||
| 387 | task('artifact:extract', function () { |
||
| 388 | run('{{bin/tar}} -xzpf {{release_path}}/{{artifact_file}} -C {{release_path}}'); |
||
| 389 | run('rm -rf {{release_path}}/{{artifact_file}}'); |
||
| 390 | }); |
||
| 391 | |||
| 392 | desc('Clears generated files prior to building.'); |
||
| 393 | task('build:remove-generated', function () { |
||
| 394 | run('rm -rf generated/*'); |
||
| 395 | }); |
||
| 396 | |||
| 397 | desc('Prepare local artifact build'); |
||
| 398 | task('build:prepare', function () { |
||
| 399 | if (!currentHost()->get('local')) { |
||
| 400 | throw new GracefulShutdownException('Artifact can only be built locally, you provided a non local host'); |
||
| 401 | } |
||
| 402 | |||
| 403 | $buildDir = get('build_from_repo') ? get('artifact_dir') . '/repo' : '.'; |
||
| 404 | set('deploy_path', $buildDir); |
||
| 405 | set('release_path', $buildDir); |
||
| 406 | set('current_path', $buildDir); |
||
| 407 | |||
| 408 | if (!get('build_from_repo')) { |
||
| 409 | return; |
||
| 410 | } |
||
| 411 | |||
| 412 | $repository = (string) get('repository'); |
||
| 413 | if ($repository === '') { |
||
| 414 | throw new GracefulShutdownException('You must specify the "repository" option.'); |
||
| 415 | } |
||
| 416 | |||
| 417 | run('rm -rf {{release_or_current_path}}'); |
||
| 418 | run('git clone {{repository}} {{release_or_current_path}}'); |
||
| 419 | run('git -C {{release_or_current_path}} checkout --force {{target}}'); |
||
| 420 | }); |
||
| 421 | |||
| 422 | desc('Builds an artifact.'); |
||
| 423 | task('artifact:build', [ |
||
| 424 | 'build:prepare', |
||
| 425 | 'build:remove-generated', |
||
| 426 | 'deploy:vendors', |
||
| 427 | 'magento:compile', |
||
| 428 | 'magento:deploy:assets', |
||
| 429 | 'artifact:package', |
||
| 430 | ]); |
||
| 431 | |||
| 432 | // Array of shared files that will be added to the default shared_files without overriding |
||
| 433 | set('additional_shared_files', []); |
||
| 434 | // Array of shared directories that will be added to the default shared_dirs without overriding |
||
| 435 | set('additional_shared_dirs', []); |
||
| 436 | |||
| 437 | |||
| 438 | desc('Adds additional files and dirs to the list of shared files and dirs'); |
||
| 439 | task('deploy:additional-shared', function () { |
||
| 440 | add('shared_files', get('additional_shared_files')); |
||
| 441 | add('shared_dirs', get('additional_shared_dirs')); |
||
| 442 | }); |
||
| 443 | |||
| 444 | /** |
||
| 445 | * Update cache id_prefix on deploy so that you are compiling against a fresh cache |
||
| 446 | * Reference Issue: https://github.com/davidalger/capistrano-magento2/issues/151 |
||
| 447 | * To use this feature, add the following to your deployer scripts: |
||
| 448 | * ```php |
||
| 449 | * after('deploy:shared', 'magento:set_cache_prefix'); |
||
| 450 | * after('deploy:magento', 'magento:cleanup_cache_prefix'); |
||
| 451 | * ``` |
||
| 452 | **/ |
||
| 453 | desc('Update cache id_prefix'); |
||
| 454 | task('magento:set_cache_prefix', function () { |
||
| 455 | //download current env config |
||
| 456 | $tmpConfigFile = tempnam(sys_get_temp_dir(), 'deployer_config'); |
||
| 457 | download('{{deploy_path}}/shared/' . ENV_CONFIG_FILE_PATH, $tmpConfigFile); |
||
| 458 | $envConfigArray = include($tmpConfigFile); |
||
| 459 | //set prefix to `alias_releasename_` |
||
| 460 | $prefixUpdate = get('alias') . '_' . get('release_name') . '_'; |
||
| 461 | |||
| 462 | //check for preload keys and update |
||
| 463 | if (isset($envConfigArray['cache']['frontend']['default']['backend_options']['preload_keys'])) { |
||
| 464 | $oldPrefix = $envConfigArray['cache']['frontend']['default']['id_prefix']; |
||
| 465 | $preloadKeys = $envConfigArray['cache']['frontend']['default']['backend_options']['preload_keys']; |
||
| 466 | $newPreloadKeys = []; |
||
| 467 | foreach ($preloadKeys as $preloadKey) { |
||
| 468 | $newPreloadKeys[] = preg_replace('/^' . $oldPrefix . '/', $prefixUpdate, $preloadKey); |
||
| 469 | } |
||
| 470 | $envConfigArray['cache']['frontend']['default']['backend_options']['preload_keys'] = $newPreloadKeys; |
||
| 471 | } |
||
| 472 | |||
| 473 | //update id_prefix to include release name |
||
| 474 | $envConfigArray['cache']['frontend']['default']['id_prefix'] = $prefixUpdate; |
||
| 475 | $envConfigArray['cache']['frontend']['page_cache']['id_prefix'] = $prefixUpdate; |
||
| 476 | |||
| 477 | //Generate configuration array as string |
||
| 478 | $envConfigStr = '<?php return ' . var_export($envConfigArray, true) . ';'; |
||
| 479 | file_put_contents($tmpConfigFile, $envConfigStr); |
||
| 480 | //upload updated config to server |
||
| 481 | upload($tmpConfigFile, '{{deploy_path}}/shared/' . TMP_ENV_CONFIG_FILE_PATH); |
||
| 482 | //cleanup tmp file |
||
| 483 | unlink($tmpConfigFile); |
||
| 484 | //delete the symlink for env.php |
||
| 485 | run('rm {{release_or_current_path}}/' . ENV_CONFIG_FILE_PATH); |
||
| 486 | //link the env to the tmp version |
||
| 487 | run('{{bin/symlink}} {{deploy_path}}/shared/' . TMP_ENV_CONFIG_FILE_PATH . ' {{release_path}}/' . ENV_CONFIG_FILE_PATH); |
||
| 488 | }); |
||
| 489 | |||
| 490 | /** |
||
| 491 | * After successful deployment, move the tmp_env.php file to env.php ready for next deployment |
||
| 492 | */ |
||
| 493 | desc('Cleanup cache id_prefix env files'); |
||
| 494 | task('magento:cleanup_cache_prefix', function () { |
||
| 495 | run('rm {{deploy_path}}/shared/' . ENV_CONFIG_FILE_PATH); |
||
| 496 | run('rm {{release_or_current_path}}/' . ENV_CONFIG_FILE_PATH); |
||
| 497 | run('mv {{deploy_path}}/shared/' . TMP_ENV_CONFIG_FILE_PATH . ' {{deploy_path}}/shared/' . ENV_CONFIG_FILE_PATH); |
||
| 498 | // Symlink shared dir to release dir |
||
| 499 | run('{{bin/symlink}} {{deploy_path}}/shared/' . ENV_CONFIG_FILE_PATH . ' {{release_path}}/' . ENV_CONFIG_FILE_PATH); |
||
| 500 | }); |
||
| 501 | |||
| 502 | /** |
||
| 503 | * Remove cron from crontab and kill running cron jobs |
||
| 504 | * To use this feature, add the following to your deployer scripts: |
||
| 505 | * ```php |
||
| 506 | * after('magento:maintenance:enable-if-needed', 'magento:cron:stop'); |
||
| 507 | * ``` |
||
| 508 | */ |
||
| 509 | desc('Remove cron from crontab and kill running cron jobs'); |
||
| 510 | task('magento:cron:stop', function () { |
||
| 511 | if (has('previous_release')) { |
||
| 512 | run('{{bin/php}} {{previous_release}}/{{magento_dir}}/bin/magento cron:remove'); |
||
| 513 | } |
||
| 514 | |||
| 515 | run('pgrep -U "$(id -u)" -f "bin/magento +(cron:run|queue:consumers:start)" | xargs -r kill'); |
||
| 516 | }); |
||
| 517 | |||
| 518 | /** |
||
| 519 | * Install cron in crontab |
||
| 520 | * To use this feature, add the following to your deployer scripts: |
||
| 521 | * ```php |
||
| 522 | * after('magento:upgrade:db', 'magento:cron:install'); |
||
| 523 | * ``` |
||
| 524 | */ |
||
| 525 | desc('Install cron in crontab'); |
||
| 526 | task('magento:cron:install', function () { |
||
| 527 | run('cd {{release_or_current_path}}'); |
||
| 528 | run('{{bin/php}} {{bin/magento}} cron:install'); |
||
| 529 | }); |
||
| 530 | |||
| 531 | desc('Prepares an artifact on the target server'); |
||
| 532 | task('artifact:prepare', [ |
||
| 533 | 'deploy:info', |
||
| 534 | 'deploy:setup', |
||
| 535 | 'deploy:lock', |
||
| 536 | 'deploy:release', |
||
| 537 | 'artifact:upload', |
||
| 538 | 'artifact:extract', |
||
| 539 | 'deploy:additional-shared', |
||
| 540 | 'deploy:shared', |
||
| 541 | 'deploy:writable', |
||
| 542 | ]); |
||
| 543 | |||
| 544 | desc('Executes the tasks after artifact is released'); |
||
| 545 | task('artifact:finish', [ |
||
| 546 | 'magento:cache:flush', |
||
| 547 | 'cachetool:clear:opcache', |
||
| 548 | 'deploy:cleanup', |
||
| 549 | 'deploy:unlock', |
||
| 550 | 'deploy:success', |
||
| 551 | ]); |
||
| 552 | |||
| 553 | desc('Actually releases the artifact deployment'); |
||
| 554 | task('artifact:deploy', [ |
||
| 555 | 'artifact:prepare', |
||
| 556 | 'magento:maintenance:enable-if-needed', |
||
| 557 | 'magento:config:import', |
||
| 558 | 'magento:upgrade:db', |
||
| 559 | 'magento:maintenance:disable', |
||
| 560 | 'deploy:symlink', |
||
| 561 | 'artifact:finish', |
||
| 562 | ]); |
||
| 563 | |||
| 564 | fail('artifact:deploy', 'deploy:failed'); |
||
| 565 |