WP-CLI 및 Robo로 WordPress 개발 환경 관리
게시 됨: 2022-09-13
반복적인 작업을 자동화하는 것은 개발 워크플로에서 시간을 절약하는 가장 좋은 방법 중 하나입니다. 플러그인 개발자로 일상적인 작업을 하다 보면 데이터베이스를 재설정하고, 특정 버전의 WordPress를 다시 설치하고, 하나 이상의 플러그인을 설치하고, 설정을 업데이트해야 하는 경우가 많습니다. 이것은 빠르게 지루해 지므로 자동화에 자연스럽게 적합합니다. 이 기사에서는 WP-CLI를 Robo와 함께 사용하여 WordPress 개발 환경을 관리하는 데 필요한 작업을 자동화하는 방법을 보여 드리겠습니다.
WordPress 명령줄 도구인 WP-CLI는 워크플로 속도를 높이는 훌륭한 시작입니다. 익숙하지 않다면 많은 블로그 게시물 중 하나를 읽는 것이 좋습니다. 설치 가이드는 OS에 설치하는 방법, 탭 완성 설정 및 구성 파일 생성 방법을 제시하는 훌륭한 출발점입니다.
목차
- 로보란?
- Robo는 명령줄 PHP를 단순화합니다.
- 로보 설치
- 첫 번째 명령
- 입력과 출력
- 위대한 도우미
- 로보의 장점
- Robo로 WordPress 유지 관리
- 중요한 파일
- 내 환경
- 데이터베이스 사용자
- 웹 서버
- 종속성 관리
- wp-cli.yml 활용
- WP-CLI의 별칭이란 무엇입니까?
- 명령 기본값
- 사용자 정의 Robo 명령 생성
- 명령 구성
-
reset
명령 - 설치 후 단계
-
profile
명령
- 마무리
로보란?
Robo는 Drush 및 Codeception을 포함한 여러 프로젝트에서 사용되는 오픈 소스 최신 작업 실행기입니다.
Robo는 Gulp 및 Grunt와 유사하지만 JavaScript 대신 PHP를 사용합니다.
아이디어는 다음과 같이 멋진 명령을 만들 수 있다는 것입니다.
# 내 WP 개발 환경을 재설정하고 다중 사이트로 만듭니다. 로보 리셋 --멀티 # WP Offload Media 플러그인 설치 및 설정 로봇 프로필 ome-dev
Robo 태스크 러너를 사용하면 명령에 DocBlock 주석을 추가하여 생성한 명령을 쉽게 문서화할 수 있으므로 향후 버전에 대한 도움말을 제공할 수 있습니다.
# 인수가 없는 Robo는 사용 가능한 명령을 표시합니다. 로봇 사용 가능한 명령: help 명령에 대한 도움말을 표시합니다. list 명령을 나열합니다. profile 기존 WordPress 환경에서 일련의 wp-cli 명령 실행 reset WordPress 환경을 알려진 상태로 재설정
특정 명령에 대한 추가 정보 요청:
로봇 도움말 재설정 설명: WordPress 환경을 알려진 상태로 재설정합니다. 환경 및 구성 읽기 robo.yml에서 용법: 재설정 [옵션] 옵션: --env[=ENV] 환경(dev, test 등) [기본값: "dev"] --multi 다중 사이트 설치 --ver[=VER] WordPress 버전 [기본값: "최신"]
Robo로 WordPress 개발 환경을 관리하기 위해 매일 사용하는 몇 가지 강력한 명령을 만들었습니다. 이 기사에서는 이러한 명령을 공유하고 그 과정에서 Robo 명령에 대한 소개를 제공하겠습니다.
Robo는 명령줄 PHP를 단순화합니다.
백미러를 잠시 살펴보겠습니다. 명령줄 PHP 명령을 작성하는 것은 확실히 새로운 것이 아닙니다. 다음과 같이 명령줄에서 PHP 스크립트를 실행하는 것은 항상 가능했습니다.
PHP myscript.php
그리고 PHP는 내가 기억하는 한 대부분의 *NIX 환경에서 명령줄 환경으로 사용할 수 있었습니다. PHP shebang을 추가하면 PHP 인터프리터가 설치된 대부분의 환경에서 작동합니다.
// file: myscript #!/usr/bin/env php <?php // do stuff here…
이렇게 하면 PHP에서 구문 분석(또는 .php 파일 확장명 포함)해야 한다고 지정하지 않고 명령줄에서 스크립트를 실행할 수 있습니다.
마이스크립트
명령줄에서 원시 PHP 스크립트를 실행하는 것의 단점은 각 스크립트에서 처리해야 하는 입력 및 출력에 대한 오버헤드가 상당히 많다는 것입니다. 명령줄에서 인수를 수락한 다음 명령줄에 메시지를 출력하는 프로세스는 약간 번거롭고 유연하지 않습니다.
Robo는 대부분의 스크립트에 필요한 많은 표준 "배관"을 처리하여 명령줄 PHP를 더 쉽게 작성할 수 있도록 합니다. 이를 통해 스크립트의 핵심 기능에 집중할 수 있습니다.
로보 설치
시작하기 전에 Robo를 설치해야 합니다. Robo를 내 컴퓨터에 전역적으로 설치한 상태로 유지하므로 다음과 같이 설치했습니다.
작곡가 전역에는 통합/로보가 필요합니다.
그러나 Composer를 통해 설치된 모든 것과 마찬가지로 더 편안하다면 프로젝트 종속성으로 유지할 수 있습니다. 또는 GitHub에 robo.phar
를 다운로드하여 설치하는 방법에 대한 지침이 있습니다.
첫 번째 명령
먼저 프로젝트 폴더에서 Robo를 초기화해야 합니다.
cd /경로/to/myproject 로봇 초기화
이것은 실제로 다음 내용으로 폴더에 새로운 RoboFile.php
를 생성합니다.
<?php class RoboFile extends \Robo\Tasks { }
첫 번째 명령을 추가하려면 public 메서드를 추가하면 됩니다.
<?php class RoboFile extends \Robo\Tasks { public function hello($world) { $this->say("Hello, $world"); } }
짐작할 수 있듯이 위의 방법은 hello
명령을 생성하고 단순히 화면에 메시지를 출력합니다.
인수 구문 분석
위에서 했던 것처럼 그 방법을 추가하는 것은 내가 Robo를 좋아하는 더 중요한 이유 중 하나, 즉 명령줄 인수를 구문 분석하는 것을 보여주는 좋은 방법입니다.
무슨 말인지 보여주기 위해 다음 명령을 실행해 보겠습니다.
로보 안녕 인수가 충분하지 않습니다(누락: "world"). 안녕하세요 [-h|--help] [-q|--quiet] [-v|vv|vvv|--verbose] [-V|--version] [--ansi] [--no-ansi] [ -n|--아니요 -interaction] [--simulate] [--progress-delay PROGRESS-DELAY] [-D|--define DEFINE] [--]
아하! hello
명령은 실제로 $world
매개변수를 예상한 다음 명령의 전체 사용 구문을 작성하기 시작하기 때문에 Robo는 오류 메시지를 표시합니다.
방법을 약간 변경하고 매개변수를 선택 사항으로 지정해 보겠습니다.
public function hello($world = 'from Robo') { $this->say("Hello, $world"); }
... 이제 다시 실행해 보겠습니다.
# 인수 없이 로보 안녕하세요 안녕하세요 로보에서 # 간단한 주장으로 로보 안녕하세요! 안녕! # 공백이 포함된 인수로 robo hello "나는 명령줄에 산다" 안녕하세요, 저는 커맨드 라인에 살고 있습니다
그게 낫다! 매개변수를 선택 사항으로 지정하여 Robo는 이제 인수를 전달하지 않고도 메서드를 행복하게 실행합니다. 우리는 또한 간단한 인수와 따옴표 안에 인수를 전달할 수 있으며 제대로 작동하는 것을 보았습니다.
명령줄 스크립트에 대한 인수 검사 논리를 작성하는 데 시간을 보낸 적이 있다면 이것이 왜 좋은 기능인지 알게 될 것입니다. 그것은 단지 많은 고통을 덜어줍니다.
예제 hello
명령은 하나의 단일 위치 인수를 사용합니다. Robo는 또한 일부 기본값으로 배열 인수를 생성하여 플래그 및 명명된 인수 사용을 지원합니다.
선택적으로 몇 가지 추가 문자를 인쇄하도록 함수를 추가로 수정해 보겠습니다.
public function hello( $world = 'from Robo', $flags = [ 'stars' => false, 'stripes' => false ] ) { if ( $flags['stars'] ) $this->say( '***************' ); if ( $flags['stripes'] ) $this->say( '===============' ); $this->say( "Hello, $world" ); if ( $flags['stripes'] ) $this->say( '==============='); if ( $flags['stars'] ) $this->say( '***************' ); }
이것은 선택적으로 이중 대시를 사용하여 명명된 인수를 전달할 수 있음을 Robo에 알립니다.
# 명명된 인수를 포함하는 것만으로도 'true' 값을 얻습니다. 로보 안녕하세요 --별 *************** 안녕하세요 로보에서 ***************
입력과 출력
우리는 이미 IO를 사용하는 예를 보았습니다. Robo 태스크 객체의 say()
함수는 단순히 문자열을 사용자에게 다시 출력합니다. 사용자에게 입력을 요청할 수 있는 ask()
함수도 있습니다.
public function hello() { $word = $this->ask("Tell me what to say:"); $this->say( $word ); }
로보 안녕하세요 ? 할 말을 알려주세요: foobar 푸바
Robo는 사용자 상호 작용을 생성하기 위해 Symfony 콘솔을 사용합니다. 이는 두 개의 간단한 say()
및 ask()
함수 외에 table()
과 같은 Symfony 콘솔의 모든 함수에 액세스할 수 있음을 의미합니다.
public function table() { $this->io()->table( ['Header 1', 'Header 2'], [ ['Cell 1-1', 'Cell 1-2'], ['Cell 2-1', 'Cell 2-2'], ['Cell 3-1', 'Cell 3-2'], ] ); }
로봇 테이블 ---------- ---------- 헤더 1 헤더 2 ---------- ---------- 셀 1-1 셀 1-2 셀 2-1 셀 2-2 셀 3-1 셀 3-2 ---------- ----------
꽤 멋지죠?
위대한 도우미
Robo를 좋아하는 또 다른 이유는 3개월 후에 다시 사용하더라도 이해하기 쉬운 코드를 더 쉽게 작성할 수 있도록 하는 많은 공통 작업에 대한 지원이 내장되어 있기 때문입니다. Robo가 몇 가지 꽤 표준적인 작업을 위해 매우 깨끗한 코드를 작성하는 데 어떻게 도움이 되는지 살펴보겠습니다.
# Create a directory, and switch to it: $this->taskExecStack() ->stopOnFail() ->exec('mkdir site') ->exec('cd site') ->run(); # Search and replace inside a text file: $this->taskReplaceInFile('VERSION') ->from('0.2.0') ->to('0.3.0') ->run(); # Run composer update: $this->taskComposerUpdate()->run(); # SSH into a server, go to a specific directory, list the contents of the directory, and set permissions on the logs subdirectory $this->taskSshExec('remote.example.com', 'user') ->remoteDir('/var/www/html') ->exec('ls -la') ->exec('chmod g+x logs') ->run();
위의 모든 것은 일반 PHP와 exec()
함수를 사용하여 가능하지만 명령 문자열을 함께 붙이고 너무 심하게 엉망이 되지 않고 인수를 올바르게 이스케이프하려고 시도하는 희망 없는 연습이 되는 경우가 많습니다.
위의 예 외에도 Git, Subversion, Rsync, Bower, Gulp, Docker, NPM 및 개발 환경에서 자주 사용되는 기타 도구에 대한 유사한 지원도 있습니다.
로보의 장점
종합하면 Robo를 사용하면 명령줄 스크립트를 훨씬 쉽게 만들 수 있으며 최종 결과는 일반적으로 일반 PHP보다 훨씬 의미론적으로 매력적입니다.
Robo용 스크립트는 순수 PHP 스크립트에 비해 읽고 이해하기가 더 쉽다는 것을 알았습니다. 왜냐하면 명령줄 상용구의 많은 부분이 Robo 자체 내부에 숨겨져 있기 때문입니다. 개인적으로 몇 달 후에 내 자신의 코드를 보고 누가 그것을 작성했는지 솔직히 궁금해 할 수 있으므로 명확하고 읽기 쉬운 코드를 작성하는 데 도움이 되는 모든 것이 내 도구 벨트에 추가되는 것을 환영합니다.
Robo로 WordPress 유지 관리
이 기사의 나머지 부분에서는 사용자가 WP-CLI, Composer 사용 및 명령줄 작업에 어느 정도 익숙하다고 가정합니다.
중요한 파일
이 설정에는 4개의 중요한 파일이 있습니다. 이 게시물 전체에서 각각을 다룰 것입니다.
- wp-cli.yml – 표준 WP-CLI 구성 파일입니다. 여러 환경을 관리할 때 WP-CLI의 몇 가지 훌륭한 내장 기능을 활용하기 위해 이것을 사용하고 있습니다.
- RoboFile.php – robo 명령을 구현하기 위한 기본 파일입니다.
- robo.yml – Robo 명령에 대한 몇 가지 추가 구성 매개변수에 대한 사용자 지정 YAML 파일입니다.
- composer.json – 표준 Composer 구성 파일입니다.
내 환경
이 기사의 나머지 부분을 위한 단계를 설정하기 위해 로컬 개발 환경이 설정되는 방법을 빠르게 설명하겠습니다. 이것은 내가 디스크에 정리한 방법의 단순화된 버전입니다.
~/src ├── 데벤브/ │ ├── RoboFile.php │ ├── 작곡가.json │ ├── wp-cli.yml │ ├── robo.yml │ ├── wordpress-dev/ │ └── 워드프레스 테스트/ ├── 플러그인1/ │ ├── 자산/ │ └── 포함/ └── 플러그인2 └── ...
src
폴더에는 개발과 관련된 모든 것이 저장되고 devenv
폴더에는 실제 런타임 환경과 관련된 파일이 들어 있습니다. 나는 일반적으로 동시에 두 개 이상의 WordPress 환경을 실행하기 때문에 각 WordPress 설치에는 이 예에서 wordpress-dev
및 wordpress-test
라는 자체 하위 폴더가 있습니다.
내가 작업하는 각 플러그인은 플러그인별로 별도의 폴더에 있습니다.
실제 세계에서 내가 딜리셔스 브레인에 대한 작업을 다양한 사이드 프로젝트와 분리하여 보관할 수 있도록 여러 개의 devenv 폴더가 있지만 이 기사와 관련이 없습니다.
데이터베이스 사용자
모든 것이 작동하도록 하기 위해 로컬 MySQL 설치에 각 WordPress 설치에 대한 로컬 데이터베이스를 만들었으며 해당 데이터베이스에 대한 올바른 액세스 권한이 있는 적절한 wordpress
라는 데이터베이스 사용자가 있습니다. 데이터베이스의 정확한 세부 정보와 사용자 자격 증명은 wp-cli.yml
파일에 저장됩니다.
웹 서버
저는 nginx를 로컬 웹 서버로 사용하고 있지만 Apache2도 마찬가지로 작동한다는 것을 알게 될 것입니다. 내 nginx 구성은 http://www.wordpress-dev.local
및 http://www.wordpress-test.local
이 위에서 언급한 두 개의 WordPress 폴더를 가리키도록 설정되었습니다.
종속성 관리
Robo 스크립트를 보다 유연하게 만들기 위해 Composer, 특히 Symfony Yaml 파서를 통해 설치된 몇 가지 추가 기능을 사용하고 있습니다. RoboFile.php
는 실제로는 일반적인 PHP 파일이기 때문에 원하는 라이브러리를 자유롭게 포함할 수 있으며 자연스럽게 Composer를 사용하여 이를 수행합니다. 이 프로젝트의 composer.json
파일은 다음과 같습니다.
{ "require": { "symfony/yaml": "^5.2" } }
복사했다면 실제로 composer update
를 사용하여 라이브러리를 설치하는 것을 잊지 마십시오.
wp-cli.yml 활용
WP-CLI로 작업할 때 wp-cli.yml
과 같은 구성 파일을 사용하여 삶을 훨씬 더 단순하게 만들 수 있습니다. 나는 두 가지 주요 이유로 WP-CLI 구성 파일을 사용합니다. 별칭과 다양한 하위 명령에 대한 기본값 설정입니다.
WP-CLI의 별칭이란 무엇입니까?
기본적으로 WP-CLI 별칭은 일부 기본값을 재정의할 수 있는 구성 파일의 레이블일 뿐입니다.
별칭의 가장 일반적인 용도는 각 별칭이 별도의 WordPress 설치를 가리키도록 기본 path
를 재정의하는 것입니다. 각 WordPress 설치는 데이터베이스 자격 증명과 함께 자체 구성 파일을 유지하므로 이 방법으로 사용되는 별칭도 별도의 데이터베이스를 나타냅니다. WP-CLI 구성 파일의 별칭은 url
, path
, user
, ssh
및 http
설정을 재정의할 수 있지만 하위 명령의 기본값은 재정의할 수 없습니다.
@test
라는 추가 WordPress 환경을 생성하면 다음과 같은 WP-CLI 명령을 실행할 수 있습니다.
# dev WordPress 설치의 모든 플러그인 나열 wp 플러그인 목록 # WordPress 설치 테스트의 모든 플러그인 나열 wp @test 플러그인 목록
명령 기본값
이전에 이것을 시도하지 않았다면 하위 명령에 대한 기본 매개변수를 설정하는 것이 매우 편리합니다. 예를 들어 config create
명령을 사용하여 새 WordPress 구성 파일을 생성할 때 매번 최소 3개의 매개변수를 지정해야 합니다.
$ wp config create --dbname=somedb --dbuser=myuser --dbpass=비밀
이것을 입력하는 것이 지겹다면 매개변수를 wp-cli.yml
파일에 추가할 수 있습니다.
config create: dbuser: myuser dbpass: secret dbname: somedb
이 작업을 완료하면 wp config create
를 사용할 수 있으며 wp-cli.yml
파일에서 올바른 매개변수를 선택합니다.
불행히도 다른 별칭에 대해 다른 명령 기본값을 설정할 수 없습니다. 이것은 실제로 내가 더 많은 자동화를 위해 Robo를 보기 시작한 이유 중 하나였습니다.
내 WP-CLI 구성 파일은 다음과 같습니다.
# Global parameter defaults path: wordpress-dev url: http://www.wordpress-dev.local user: admin @test: path: wordpress-test url: www.wordpress-test.local # Subcommand defaults config create: dbuser: wordpress dbpass: ***** dbname: wordpress extra-php: | define( 'WP_DEBUG', true ); define( 'WP_DEBUG_LOG', true); define( 'SCRIPT_DEBUG', true ); core install: admin_user: admin admin_password: admin admin_email: [email protected] title: WordPress Dev core multisite-install: admin_user: admin admin_password: admin admin_email: [email protected]
이 구성 파일만 있으면 매번 개별 매개변수를 지정하지 않고도 일반 명령을 실행할 수 있습니다.

# 테스트 환경에서 데이터베이스 재설정 wp @test db 재설정 --예 # 최신 버전을 다운로드하고 wp-config.php 파일을 생성합니다. wp @테스트 코어 다운로드 wp @test 구성 생성 # 워드프레스 설치 wp @test core install --title="워드프레스 테스트"
WP-CLI는 구성 파일에서 대부분의 매개변수를 선택 --dbuser
및 --admin_email
과 같이 일반적으로 입력해야 하는 모든 명령줄 매개변수를 입력할 필요가 없습니다.
위의 마지막 예에서는 title
매개변수를 별도로 제공했습니다. 테스트 환경에서 사이트 제목을 다르게 하고 싶지만 별칭을 사용하여 이 매개변수를 재정의할 수 없기 때문입니다.
사용자 정의 Robo 명령 생성
새로운 WordPress 설치를 설정하는 것만으로는 거의 충분하지 않습니다. 일반적으로 설치 및 활성화해야 하는 하나 이상의 플러그인이 있으며 여기저기서 수정해야 할 몇 가지 설정이 있습니다.
주의 깊게 작성된 WP-CLI 구성 파일을 사용하더라도 WordPress 환경을 재설정하고 모든 것을 준비하려는 경우 여전히 긴 명령 문자열로 끝납니다. 나는 종종 다음과 같은 시퀀스를 반복해서 했습니다.
# 내 개발 환경 재설정 wp DB 재설정 --예 rm -rf 경로/to/wordpress wp 코어 다운로드 wp 구성 만들기 wp 코어 설치 ln -s 경로/to/my/plugin1 경로/to/wordpress/wp-content/plugins/ wp 플러그인 활성화 plugin1
WP-CLI 구성 파일을 최대한 활용하는 경우에도 많은 입력이 필요합니다. 이것을 반복해서 입력하고 때때로 실수하는 것을 방지하기 위해 Robo를 사용하여 두 가지 특수 명령을 만들어 이를 수행했습니다.
- reset – WordPress 환경을 알려진 상태로 재설정합니다.
- profile – 기존 환경에서 일련의 명령을 실행합니다.
WP-CLI 하위 명령 기본 매개변수는 다른 명령줄 환경으로 확장되지 않으므로 Robo를 사용하여 같은 돌로 새를 죽일 수 있습니다. 방법을 봅시다.
명령 구성
첫 번째 중지는 이를 위해 만든 Robo 구성 파일을 살펴보는 것입니다. YAML로 작성되었으므로 이해하고 확장하기가 상당히 쉽습니다. 각 섹션을 사용하는 명령에 대해 살펴보겠습니다.
wordpress-dev: cli-prefix: "" path: "wordpress" core-multisite-install: title: WordPress Multisite post-install: - ln -s $cwd/../plugins1 $path/wp-content/plugins/ - ln -s $cwd/../plugins2 $path/wp-content/plugins/ wordpress-test: cli-prefix: "@test" path: "wordpress-test" config-create: dbname: wordpress-test core-install: title: WordPress Test core-multisite-install: title: WordPress Test Multisite post-install: - ln -s $cwd/../plugins1 $path/wp-content/plugins/ profiles: woocommerce: - $wp plugin install --activate woocommerce - $wp wc payment_gateway update cheque --enabled=true --user=admin - $wp option update woocommerce_calc_taxes yes - $wp wc tax create --name=VAT --rate=10 --user=admin - $wp wc shipping_zone_method create 0 --method_id=flat_rate --user=admin - $wp option update --format=json woocommerce_flat_rate_1_settings '{"title":"Flat rate","tax_status":"taxable","cost":"15"}' imageimport: - $wp media import $cwd/../media/lots-of-images/* issue2530: - $wp plugin install --activate some_plugin - $wp config set FOOBAR true --raw
각 WordPress 환경은 wordpress-$env
키를 사용하여 식별됩니다. 각 키는 여러 구성 값을 보유할 수 있습니다.
reset
명령
첫 번째 명령은 reset
입니다. 다음과 같이 명령줄에서 사용됩니다.
# dev(기본) 환경을 재설정합니다. 로보 리셋 # 또는 더 노골적으로 로보 리셋 –env=dev # 테스트 환경 재설정 로보 리셋 –env=테스트 # 개발 환경 재설정 및 WordPress 다중 사이트 설치 로보 리셋 --멀티 # 개발 환경을 특정 WordPress 버전으로 재설정 로보 리셋 --ver=5.6.1
이 명령이 수행하는 첫 번째 작업은 대상 WordPress 설치 디렉터리의 기존 파일과 폴더를 모두 삭제하고 구성된 WordPress 데이터베이스를 재설정하는 것입니다.
그런 다음 reset
명령은 WP-CLI 명령 core download
, config create
및 --multi
옵션에 따라 core install
또는 core multisite-install
중 하나를 사용합니다.
가능한 최대로 wp-cli.yml
파일에 있는 명령 매개변수 기본값을 사용합니다. 그 이유는 이러한 기본값이 Robo 래퍼 없이 직접 WP-CLI를 실행할 때도 유용하기 때문입니다. 그러나 위에서 논의한 바와 같이 어떤 경우에는 불가능합니다.
따라서 robo.yml
구성 파일은 wp-cli.yml.
예를 들어 @test 환경을 설치할 때 core install
매개변수 --title
에 대한 매개변수를 재정의하려고 합니다. robo.yml
에 다음을 추가하면 됩니다.
wordpress-test: ... ... core-install: title: WordPress Test ... ...
여기서 구문은 매우 쉽습니다. CLI 명령 이름(공백은 대시로 대체됨)을 키로 사용하고 각 명명된 매개변수에 대해 하나의 하위 키를 사용합니다. 위의 예는 core install
cli 명령에 다음과 같은 추가 매개변수를 생성합니다.
wp @test core install --title="워드프레스 테스트"
설치 후 단계
구성 파일의 각 환경 키는 선택적으로 설치 후 단계로 어레이를 지정할 수 있습니다. 이것은 단순히 WordPress 설치가 완료될 때 실행되는 bash 명령 목록입니다. 유연성을 높이기 위해 명령이 실행되기 전에 몇 가지 문자열을 교체합니다.
끈 | 로 대체됨 |
---|---|
$cwd | 현재 작업 디렉토리 |
$경로 | 대상 WordPress 설치 경로 |
$wp | 별칭 접두사를 포함하는 wp-cli 명령(예: wp @test) |
~ | (물결 기호) 현재 사용자의 HOME 디렉토리 |
따라서 ln -s $cwd/../plugin1 $path/wp-content/plugins/
의 설치 후 단계는 내 플러그인 폴더 중 하나에서 대상 WordPress 설치의 플러그인 하위 폴더로의 심볼릭 링크를 생성합니다.
profile
명령
profile
명령은 설치 후 단계와 매우 유사하지만 기존 WordPress 설치에서 일련의 명령을 실행하는 데 사용됩니다. 대부분의 작업을 수행하는 매우 단순한 개발 환경이 있다고 가정해 보겠습니다. 그러나 때로는 WooCommerce 플러그인을 설치하고 이에 대한 몇 가지 기본 설정을 수행해야 합니다. 이것이 profile
명령의 용도입니다. 다음과 같이 사용할 수 있습니다.
# 개발 환경 재설정 로보 리셋 # WooCommerce 설치 및 일부 설정 변경 로보 프로필 우커머스
위의 샘플 robo.yml
파일에는 WooCommerce 프로필이 있습니다. 해당 프로필을 적용하면:
- WP-CLI를 사용하여 WooCommerce를 설치하고 활성화합니다.
-
wc
하위 명령을 사용하여 지불 게이트웨이, 세금 구역 및 배송 설정을 설정합니다. -
option
하위 명령을 사용하여 WordPress 옵션 테이블에서 직접 일부 설정을 수정합니다.
다른 프로필을 사용하는 것은 매우 유용합니다. 저는 대부분의 시간을 WP Offload Media 플러그인 작업에 보내고 있으며 종종 많은 이미지를 WordPress 미디어 라이브러리로 가져와야 합니다. WP-CLI에는 다음과 같은 매우 편리한 명령이 있습니다.
wp 가져오기 미디어 /some/long/path/I/often/forget/*
나는 일반적으로 많은 것을 잊고 특히 긴 경로 이름을 잊어버리기 때문에 기억하기가 더 쉽습니다.
robo 프로필 이미지 가져오기
여기 또 다른 예가 있습니다. 저는 플러그인과 다른 인기 있는 WordPress 플러그인 간의 호환성 문제를 해결하려고 하는 특정 GitHub 문제에 대해 작업하고 있습니다. 해당 문제에 대해 작업할 때 해당 플러그인을 설치하고 wp-config.php.
그래서 프로필을 만들었습니다.
.... issue2530: - $wp plugin install --activate some_plugin - $wp config set FOOBAR value
이제 robo profile issue2530
만 수행하면 내 환경을 한 단계로 준비할 수 있습니다.
reset 명령의 post-install
단계와 마찬가지로 프로필 정의의 각 행은 실제로 별도의 bash 명령입니다. 이를 사용하여 별도의 스크립트를 실행하거나 파일을 삭제하거나 원하는 모든 작업을 수행할 수 있습니다. 발에 총을 쏘는 것도 가능하므로 조심스럽게 밟으십시오.
출처
위의 항목 중 하나라도 시도해 보면 재미있을 것 같으면 위의 모든 항목에 사용하고 있는 RoboFile입니다. Robo를 사용하여 WordPress 관리를 시작하는 데 자유롭게 사용하세요.
<?php use Robo\Symfony\ConsoleIO; use Robo\Tasks; use Symfony\Component\Yaml\Yaml; require_once 'vendor/autoload.php'; /** * Class RoboFile */ class RoboFile extends Tasks { /** * Reset the WordPress environment to a known state. Reads environments * and configuration from robo.yml * * @option env Environment (dev, test etc) * @option multi Make a multi site install * @option ver WordPress version * * @return bool */ public function reset( $opts = [ 'env' => 'dev', 'multi' => false, 'ver' => 'latest' ] ) { $env = $opts['env']; $version = $opts['ver']; $multi = $opts['multi']; $all_config = $this->read_yaml(); $key = "wordpress-$env"; if ( ! $this->ensure_basic_config( $all_config, $env ) ) { return false; } if ( ! isset( $all_config[ $key ]['path'] ) ) { $this->say( "No path set for environment $env." ); } $config = $all_config[ $key ]; $prefix = $config['cli-prefix']; $wp = trim( "wp $prefix" ); $path = $config['path']; $path = substr( $path, 0, 1 ) !== '/' ? __DIR__ . '/' . $path : $path; $version = $version === 'latest' ? '' : "--version=$version"; $config_create = $this->additional_parameters( 'config create', $config ); $install_cmd = $multi ? 'core multisite-install' : 'core install'; $install_params = $this->additional_parameters( $install_cmd, $config ); echo "$wp $install_cmd $install_params\n"; $this->taskExec( "$wp db reset --yes" )->run(); $this->taskExecStack() ->exec( "rm -rf $path/*" ) ->exec( "$wp core download $version" ) ->exec( "$wp config create $config_create" ) ->exec( "$wp config delete WP_DEBUG" ) ->exec( "$wp $install_cmd $install_params" ) ->run(); foreach ( $config['post-install'] as $cmd ) { $cmd = str_replace( '$wp', $wp, $cmd ); $cmd = str_replace( '$path', $path, $cmd ); $cmd = str_replace( '$cwd', __DIR__, $cmd ); $cmd = str_replace( '~', getenv( "HOME" ), $cmd ); echo $cmd . "\n"; $this->taskExec( $cmd )->run(); } } /** * Run a set of wp-cli commands on an existing WordPress environment * * @param string $profileName Name of the profile in robo.yml * * @option env Environment (dev, test etc) */ public function profile( $profileName, $opts = ['env' => 'dev']) { $env = $opts['env']; $all_config = $this->read_yaml(); $key = "wordpress-$env"; if ( ! $this->ensure_basic_config( $all_config, $env ) ) { return false; } $config = $all_config[ $key ]; $prefix = $config['cli-prefix']; $wp = trim( "wp $prefix" ); $path = $config['path']; $path = substr( $path, 0, 1 ) !== '/' ? __DIR__ . '/' . $path : $path; if ( ! isset( $all_config['profiles'][ $profileName ] ) ) { $this->say( "Profile $profileName not found" ); return false; } $profile = $all_config['profiles'][ $profileName ]; foreach ( $profile as $cmd ) { $cmd = str_replace( '$wp', $wp, $cmd ); $cmd = str_replace( '$path', $path, $cmd ); $cmd = str_replace( '$cwd', __DIR__, $cmd ); $cmd = str_replace( '~', getenv( "HOME" ), $cmd ); // Quick and dirty. If the cmd exactly matches another profile, run it! if ( isset( $all_config['profiles'][ $cmd ] ) ) { $this->profile( $cmd, $env ); continue; } echo $cmd . "\n"; $this->taskExec( $cmd )->run(); } } /** * @return array */ private function read_yaml() { return Yaml::parseFile( __DIR__ . '/robo.yml' ); } /** * @param $config * @param $env * * @return bool */ private function ensure_basic_config( $config, $env ) { $key = "wordpress-$env"; if ( ! isset( $config[ $key ] ) ) { $this->say( "No path set for environment $env." ); return false; } if ( ! isset( $config[ $key ]['cli-prefix'] ) ) { $this->say( "No wp-cli prefix set for environment $env." ); return false; } return true; } /** * @param string $name * @param array<string, string> $config * * @return string */ private function additional_parameters( $name, $config ) { $name = str_replace( ' ', '-', $name ); if ( ! isset( $config[ $name ] ) ) { return ''; } return implode( ' ', array_map( function ( $v, $k ) { return sprintf( "--%s='%s'", $k, $v ); }, $config[ $name ], array_keys( $config[ $name ] ) ) ); } }
마무리
개발 과정에서 반복적인 작업은 영역을 따라가는 경향이 있습니다. 나는 그것들을 완전히 없애는 방법을 볼 수 없지만 가능한 한 많은 것을 자동화하면 사용 가능한 시간에 최대한 많은 실제 작업을 완료하는 데 실제로 도움이 됩니다.
여기에 설명된 WP-CLI와 Robo의 조합으로 이러한 작업 중 일부를 자동화하면 플러그인 개발자로서 매일 시간을 절약할 수 있습니다. 다시는 수동으로 이러한 작업을 수행할 수 없습니다.
개발 워크플로에서 가장 지루한 부분을 자동화하기 위해 어떤 도구를 사용합니까? 댓글로 알려주세요.