From 61efc4c8ac477e7ae375314ddb9d4a419f1d5f68 Mon Sep 17 00:00:00 2001 From: "Hahn Axel (hahn)" <axel.hahn@iml.unibe.ch> Date: Fri, 23 Apr 2021 09:53:33 +0200 Subject: [PATCH] update readme --- readme.md | 80 +++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 63 insertions(+), 17 deletions(-) diff --git a/readme.md b/readme.md index 22af2b8..973c98e 100644 --- a/readme.md +++ b/readme.md @@ -1,6 +1,11 @@ # IML deployment client :: proof of concept :: WIP -This client is a set of bash scripts to deploy a package that was built on ci server. +This client is a set of bash scripts to deploy a package that was built on th IML CI server. + +This project is related to + +* CI deployment web gui <https://git-repo.iml.unibe.ch/iml-open-source/imldeployment> +* CI package server <https://git-repo.iml.unibe.ch/iml-open-source/ci-pkg> ## License @@ -16,26 +21,41 @@ On a server the client must be deployed i.e. in `/opt/deployment-client/` Use git clone if you feel familiar with git. Otherwise download the archive and extract it. -## Set up a software package +## Execution plan + +I fully configured the deployment executes the following steps + +* loop over profiles ... and per profile ... +* set profile data by sourcing [profile]/config.js +* download Software archive +* detect if download is newer than the last one +* jump into installation dir of your application +* optional: execute pre installation tasks +* optional: run cleanup +* extract software archive +* create config files +* optional: execute post installation tasks -### Set up access to software +## Set up access to package server This setting is for all projects on the server. It has to be done once. * in ./bin directory copy getfile.sh.cfg.dist to getfile.sh.cfg * edit getfile.sh.cfg and define software endpoint and set the phase: -```txt +```bash IMLCI_URL=https://software.example.com IMLCI_PKG_SECRET=put-secret-here IMLCI_PHASE=preview ``` -### Set up rollout +## Set up software rollout + +### Create a profile * Create a subdirectory in ./profiles/ for each rollout * The example subdir gives an orientation and can be copied, i.e. `cp -r example myapp` -* create a config file named `./profiles/myapp/config.sh` +* create a config file named `./profiles/myapp/config.sh` (copy the config.sh.dist from example profile) ```txt # my install dir @@ -58,6 +78,17 @@ cleanup_preview=0 cleanup_force=0 ``` +Config variables: + +name | type | description +--- | --- | --- +installdir | string | target directory of your application +appowner | string | if not empty a chown -R will be applied in target directory by `chwon -R ${appowner} ${installdir}`; appowner is the parameter behind -R. It is something like "myuser." or "myuser:mygroup". For a web application it should be the user of your webservice (www-data/ apache/ nginx). The command chown requires to run the deploy script as root. +IMLCI_PROJECT | string | Project id in IML CI server +IMLCI_PHASE | string | optional: override the global IMLCI_PHASE in ./bin/getfile.sh.cfg; it is one of preview\|stage\|live +cleanup_preview | 0 or 1 | Cleanup preview - shows diff between downloaded TGZ and ${installdir}. +cleanup_force | 0 or 1 | Run cleanup: it deletes all files in target directory that aren't in the last downloaded tgz. To keep runtime data like logs or uploads you can add a file `.keep` in the directory. + Make a testrun: `./deploy_app.sh` in application root. It should download the software package and extract it and install it into you `${installdir}`. @@ -78,22 +109,13 @@ For hooks you can create files with pre defined names. A hook script must have e * profiles/myapp/tasks_config.sh - replace config files (see below) * profiles/myapp/tasks_postinstall.sh - do postinstall actions before finishing -Example: - -```txt -# ---------------------------------------------------------------------- -# TASKS :: POST INSTALL ACTIONS -# ---------------------------------------------------------------------- -hooks/ondeploy -``` - -### Create configs +#### Create configs The script `./bin/create_config.sh` can read config templates and create an output file. You need to reference the template, output file and a file for replacement data. -```txt +```bash # ---------------------------------------------------------------------- # TASKS :: GENERATE CONFIGS # ---------------------------------------------------------------------- @@ -103,3 +125,27 @@ You need to reference the template, output file and a file for replacement data. # v v v v "${selfdir}/bin/create_config.sh" hooks/templates/mytemplate.erb config/target.php ${projectdir}/replace.txt ``` + +#### Pre and post install actions + +Example: A simple tasks_postinstall.sh can contain the start of a script that is delivered in the tgz archive. + +```bash +# ---------------------------------------------------------------------- +# TASKS :: POST INSTALL ACTIONS +# ---------------------------------------------------------------------- +hooks/ondeploy +``` + +## Scripts + +### deploy_app.sh + +This is the main deployment script. + +```txt +./deploy_app.sh [PROFILENAME] +``` + +If you start it without parameter it will loop over all existing profiles. +You can add an existing profile name to limit the execution to that profile only. \ No newline at end of file -- GitLab