Page tree
Skip to end of metadata
Go to start of metadata

Pro nasazování PHP based webových aplikací za použití nástrojů kontinuální integrace (Jenkins/Hudson CI) by měl být dodržován následující standardizovaný postup.

Každý deploy job by měl být pojmenován ve tvaru $PROJECT-$APP_ENV a měl by mít nastaveny následující parametry

NázevPopisPříklad(y)
ORG_DOMAINDoména organizace využívaná pro potřeby auromatizovaného deploymentu
organization.com
ORIGINURL zdrojového systému, ve kterém je uloženo Git main repository
git@bitbucket.org:organization
ssh://git@git.$BASE_DOMAIN/www 
PROJECTNázev projektu (odpovídá názvu Git repository)
someproject
BRANCHNázev branche (příp. tagu), ze které má být nasazováno (musí odpovídat typu prostředí - viz. parametr APP_ENV)
master
SERVERDoménová adresa cílového serveru, na který se bude nasazovat
server1.$ORG_DOMAIN
SITE_DIRAdresář na cílovém serveru, do kterého se nasazují webové aplikace (site)
/home/shared/site
/var/www/site
APP_ENV

Typ prostředí pro nasazovanou aplikaci

HodnotaPopisGit branch ($BRANCH)
develop
Vývojové/interní testovací prostředídevelop
preview
Testovací (též preview, UAT) prostředí primárně určené pro hotfixy,
sekundárně release (pokud není definováno prostředí beta)
preview
beta
Beta prostředí (též pre-release, UAT2); pouze u vybraných projektů typu MMMIPSrelease/* (beta)
production
Produkční prostředímaster (tag x.y)
production
APP_URL

URL na které je aplikace (site) dostupná. Pokud není pro konkrétní projekt stanoveno specificky jinak, měla by URL v závislosti na typu prostředí (APP_ENV) mít následující tvar:

Hodnota APP_ENVPožadovaný tvar URL (* = variabilní část)
develop
$PROJECT.develop.$ORG_DOMAIN
preview
$PROJECT.preview.$ORG_DOMAIN, $PROJECT-preview.*
beta
$PROJECT-beta.*, beta.*
$PROJECT.beta.$ORG_DOMAIN
production
*
http://www.someproject.com
JOB_NAMEGlobální proměnná nasetovaná Jenkinsem. Pokud je Jenkins job pojmenován dle standardu, je možné JOB_NAME použít např. pro definici site directory.

someproject-develop

someproject-production

Konceptuální deploy skript pro PHP projekty pak vypadá následovně

# download
git clone $ORIGIN/$PROJECT.git .
git checkout $BRANCH
 
# compose
composer update

# TODO validate source code
# validate src
 
# test
vendor/bin/phpunit --testsuite install
 
# deploy
rsync -az -e ssh --delete --exclude /config/*local* --exclude /data --exclude tmp . deployer@$SERVER:$SITE_DIR/$JOB_NAME/
 
# post-install test (selenium)
vendor/bin/phpunit --testsuite post-install
 
# generate API documentation (available at https://$BASE_DOMAIN/api/$PROJECT/$BRANCH)
apigen --source src --source vendor/my-vendor --skip-doc-path "vendor/my-vendor" --destination /home/www/api/$PROJECT/$BRANCH

Generování API dokumentace

Pokud se třídy projektu odkazují na třídy některého ze závislých projektů, přidáme příslušnou skupinu projektů jako zdroj a zároveň vynecháme jejich dokumentaci. Výsledkem je, že se do dokumentace výslovně zahrnou pouze třídy, které jsou z projektu odkazované.

Testování aplikace

V post-install (seleniových) testech by parametr APP_URL měl být přebírán jako proměnná prostředí

public function setUp() {
    $this->setBrowser('firefox');
    $this->setBrowserUrl(getenv('APP_URL'));
}

Tento standard je interně implementován způsobem popsaným v dokumentu Deployment standard implementace v Lundegaardu, praktické how-to's viz Deployment projektu (nejen na Vivo 2).

 

Související

Seznam proměnných prostředí, které Jenkins vždy setuje v rámci buildu: https://wiki.jenkins-ci.org/display/JENKINS/Building+a+software+project#Buildingasoftwareproject-below