Skip to content
Snippets Groups Projects
user avatar
Hahn Axel (hahn) authored
3645a526
History
Name Last commit Last update
bin
profiles/example
.gitignore
deploy_app.sh
readme.md

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.

License

GNU GPL 3.0

Source

URL: https://git-repo.iml.unibe.ch/iml-open-source/imldeployment-client/

Installation

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

Set up access to software

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:
IMLCI_URL=https://software.example.com
IMLCI_PKG_SECRET=put-secret-here
IMLCI_PHASE=preview

Set up rollout

  • 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
# my install dir
installdir=/var/www/myapp

# fileowner
# appowner="user:www-data"

# ----- settings for CI server software package 

# override global value 
# export IMLCI_PHASE=preview

# see output of
export IMLCI_PROJECT=id-in-ci-server

Make a testrun: ./deploy_app.sh in application root. It should download the software package and extract it and install it into you ${installdir}.

Add hooks

If needed you can create hook scripts. The working directory is ${installdir} that you can use relative pathes to point to your files in the the extracted sources.

To access other ressources you can user these variables:

${selfdir}     application root of deployment scripts
${projectdir}  project config dir i.e. [path]/profiles/myapp

For hooks you can create files with pre defined names. A hook script must have executable rights. You get a hint message if it does not exist or has no x permission. A missing hook script does not result in an error.

  • profiles/myapp/tasks_preinstall.sh - do something before extracting the archive.
  • profiles/myapp/tasks_config.sh - replace config files (see below)
  • profiles/myapp/tasks_postinstall.sh - do postinstall actions before finishing

Example:

# ----------------------------------------------------------------------
# TASKS :: POST INSTALL ACTIONS
# ----------------------------------------------------------------------
hooks/ondeploy

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.

# ----------------------------------------------------------------------
# TASKS :: GENERATE CONFIGS
# ----------------------------------------------------------------------

#               create_config.sh    template_file                                 target_file                       replacements (can be multiple files)
#               |                   |                                             |                                 |
#               v                   v                                             v                                 v
"${selfdir}/bin/create_config.sh"   hooks/templates/mytemplate.erb                config/target.php                 ${projectdir}/replace.txt