Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
I
Imldeployment Client
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
IML Open Source
Imldeployment Client
Commits
c5f0f9bb
Commit
c5f0f9bb
authored
4 years ago
by
Hahn Axel (hahn)
Browse files
Options
Downloads
Patches
Plain Diff
v0.3 add params (list, force, help)
parent
a7fba47a
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
deploy_app.sh
+165
-94
165 additions, 94 deletions
deploy_app.sh
with
165 additions
and
94 deletions
deploy_app.sh
+
165
−
94
View file @
c5f0f9bb
...
...
@@ -6,6 +6,7 @@
# ----------------------------------------------------------------------
# 2021-04-19 v0.1 <axel.hahn@iml.unibe.ch> initial version
# 2021-05-09 v0.2 <axel.hahn@iml.unibe.ch> chown includes dot files
# 2021-05-14 v0.3 <axel.hahn@iml.unibe.ch> add params (list, force, help)
# ======================================================================
...
...
@@ -100,131 +101,201 @@ function run_task(){
fi
}
# ----------------------------------------------------------------------
# MAIN
# ----------------------------------------------------------------------
cd
$(
dirname
$0
)
function
deploy
(){
skipmessage
=
"SKIP: no newer download file. You can use parameter -f to fore reinstall."
if
[
$#
-eq
0
]
;
then
header
"looping over all profiles"
getprofiles
echo
for
myprofile
in
$(
getprofiles
)
do
$0
$myprofile
done
rc
=
$?
profile
=
header
"loop over projects is finished"
echo
exiting with statuscode
$rc
exit
$rc
fi
# ----------------------------------------------------------------------
header
"Set profile [
$1
]"
setprofile
$1
echo
echo
echo
"<<<<<<<<<<##########| POC :: DEPLOYMENT SCRIPT |##########>>>>>>>>>>"
echo
# ----------------------------------------------------------------------
header
"Download
${
IMLCI_PROJECT
}
.tgz"
typeset
-i
local
isupdate
=
$defaultupdate
${
selfdir
}
/bin/getfile.sh
-f
${
IMLCI_PROJECT
}
.tgz
-o
${
downloadtmp
}
if
[
$?
-ne
0
]
;
then
echo
Repeating request with debug param
-d
to get the error...
${
selfdir
}
/bin/getfile.sh
-d
-f
${
IMLCI_PROJECT
}
.tgz
-o
${
downloadtmp
}
exit
1
fi
# ----------------------------------------------------------------------
header
"Set profile [
$1
]"
setprofile
$1
# ----------------------------------------------------------------------
header
"Detect if download is newer than last download."
if
[
-f
${
downloadfile
}
]
;
then
# ls -l "${downloadfile}" "${downloadtmp}"
diff
"
${
downloadfile
}
"
"
${
downloadtmp
}
"
if
[
$?
-eq
0
]
;
then
echo
"INFO: the downloaded file is the same like last download."
rm
-f
"
${
downloadtmp
}
"
else
echo
"OK: donwload contains an update."
isupdate
=
$isupdate
+1
mv
"
${
downloadtmp
}
"
"
${
downloadfile
}
"
fi
else
echo
"INFO: last download not available - first install or a forced update."
isupdate
=
$isupdate
+0
mv
"
${
downloadtmp
}
"
"
${
downloadfile
}
"
fi
ls
-l
"
${
downloadfile
}
"
# ----------------------------------------------------------------------
header
"Download
${
IMLCI_PROJECT
}
.tgz"
isupdate
=
0
${
selfdir
}
/bin/getfile.sh
-f
${
IMLCI_PROJECT
}
.tgz
-o
${
downloadtmp
}
if
[
$?
-ne
0
]
;
then
echo
Repeating request with debug param
-d
to get the error...
${
selfdir
}
/bin/getfile.sh
-d
-f
${
IMLCI_PROJECT
}
.tgz
-o
${
downloadtmp
}
exit
1
fi
# ----------------------------------------------------------------------
header
"Switch into install dir
${
installdir
}
..."
test
-d
"
${
installdir
}
"
||
mkdir
-p
"
${
installdir
}
"
cd
${
installdir
}
||
exit
2
# ----------------------------------------------------------------------
header
"Detect if download is newer than last download."
if
[
-f
${
downloadfile
}
]
;
then
# ls -l "${downloadfile}" "${downloadtmp}"
diff
"
${
downloadfile
}
"
"
${
downloadtmp
}
"
if
[
$?
-eq
0
]
;
then
echo
"INFO: the downloaded file is the same like last download."
rm
-f
"
${
downloadtmp
}
"
# ----------------------------------------------------------------------
header
"PRE tasks"
# what you could do here:
# - enable maintenance flag
# - stop service
# - cleanup directory ... up to remove all current files
test
$isupdate
-eq
0
&&
echo
$skipmessage
test
$isupdate
-eq
0
||
run_task
"
${
profiledir
}
/tasks_preinstall.sh"
# ----------------------------------------------------------------------
header
"PRE tasks II - cleanup"
if
[
$isupdate
-eq
0
]
;
then
echo
$skipmessage
else
echo
"OK: donwload contains an update."
isupdate
=
1
mv
"
${
downloadtmp
}
"
"
${
downloadfile
}
"
test
"
$cleanup_preview
"
-eq
"1"
||
echo
"SKIP: preview of cleanup is disabled."
test
"
$cleanup_preview
"
-eq
"1"
&&
"
${
selfdir
}
/bin/preinstall_cleanup.sh"
"
${
installdir
}
"
"
${
downloadfile
}
"
test
"
$cleanup_force
"
-eq
"1"
||
echo
"SKIP: cleanup files is disabled."
test
"
$cleanup_force
"
-eq
"1"
&&
"
${
selfdir
}
/bin/preinstall_cleanup.sh"
"
${
installdir
}
"
"
${
downloadfile
}
"
"force"
fi
else
echo
"INFO: last download not available - first install or a forced update."
isupdate
=
1
mv
"
${
downloadtmp
}
"
"
${
downloadfile
}
"
fi
ls
-l
"
${
downloadfile
}
"
# ----------------------------------------------------------------------
header
"Switch into install dir
${
installdir
}
..."
test
-d
"
${
installdir
}
"
||
mkdir
-p
"
${
installdir
}
"
cd
${
installdir
}
||
exit
2
# ----------------------------------------------------------------------
header
"Extract
${
downloadfile
}
$(
pwd
)
"
test
$isupdate
-eq
0
&&
echo
$skipmessage
test
$isupdate
-eq
0
||
tar
-xzf
"
${
downloadfile
}
"
.
||
exit
3
ls
-l
# ----------------------------------------------------------------------
header
"PRE tasks"
# what you could do here:
# - enable maintenance flag
# - stop service
# - clenaup directory ... up to remove all current files
run_task
"
${
profiledir
}
/tasks_preinstall.sh"
# ----------------------------------------------------------------------
# header "Remove download archive ${IMLCI_PROJECT}.tgz"
# echo rm -f ${IMLCI_PROJECT}.tgz
# ----------------------------------------------------------------------
header
"
PRE tasks II - cleanup
"
test
"
$cleanup_preview
"
-eq
"1"
||
echo
"SKIP: preview of cleanup is disabled."
test
"
$cleanup_preview
"
-eq
"1"
&&
"
${
selfdir
}
/bin/preinstall_cleanup.sh"
"
${
installdir
}
"
"
${
downloadfile
}
"
# ----------------------------------------------------------------------
header
"
Update config files
"
echo
"Showing replacements:"
;
grep
'@replace\['
hooks/templates/
*
run_task
"
${
profiledir
}
/tasks_config.sh
"
test
"
$cleanup_force
"
-eq
"1"
||
echo
"SKIP: cleanup files is disabled."
test
"
$cleanup_force
"
-eq
"1"
&&
"
${
selfdir
}
/bin/preinstall_cleanup.sh"
"
${
installdir
}
"
"
${
downloadfile
}
"
"force"
# ----------------------------------------------------------------------
header
"Set file owner [
${
appowner
}
]"
if
[
$isupdate
-eq
0
]
;
then
echo
$skipmessage
else
if
[
!
-z
"
${
appowner
}
"
]
;
then
sudo chown
-R
$appowner
*
.
*
||
exit
5
ls
-la
else
echo
"SKIP: variable appowner was not set"
fi
fi
# ----------------------------------------------------------------------
header
"Extract
${
downloadfile
}
$(
pwd
)
"
tar
-xzf
"
${
downloadfile
}
"
.
||
exit
3
ls
-l
# ----------------------------------------------------------------------
header
"POST tasks"
# what you could do here:
# - start current deploy scripts
# - apply database updates
# - set permissions
# - start service
# - remove maintenance flag
# - send success message as email/ slack/ [another fancy tool]
test
$isupdate
-eq
0
&&
echo
$skipmessage
test
$isupdate
-eq
0
||
run_task
"
${
profiledir
}
/tasks_postinstall.sh"
cd
$(
dirname
$0
)
}
# ----------------------------------------------------------------------
# MAIN
# ----------------------------------------------------------------------
# header "Remove download archive ${IMLCI_PROJECT}.tgz"
# echo rm -f ${IMLCI_PROJECT}.tgz
# ----------------------------------------------------------------------
header
"Update config files"
echo
"Showing replacements:"
;
grep
'@replace\['
hooks/templates/
*
run_task
"
${
profiledir
}
/tasks_config.sh"
cd
$(
dirname
$0
)
action
=
"deploy"
typeset
-i
defaultupdate
=
0
# ----------------------------------------------------------------------
header
"Set file owner [
${
appowner
}
]"
if
[
!
-z
"
${
appowner
}
"
]
;
then
sudo chown
-R
$appowner
*
.
*
||
exit
5
ls
-la
echo
echo
echo
"<<<<<<<<<<##########| IML - DEPLOYMENT SCRIPT |##########>>>>>>>>>>"
echo
while
getopts
'hfl'
arg
;
do
case
${
arg
}
in
h
)
echo
"HELP"
echo
"Load one or more profiles profile to deploy an application."
echo
"If the download file is not newer then it does not extract files and does not"
echo
"run pre and post hooks - it updates the config files only and sets the owner."
echo
echo
"Syntax:"
echo
"
$(
basename
$0
)
[OPTION] [PROFILE(S)]"
echo
echo
"Optioms:"
echo
" -h | show this help and exit"
echo
" -f | force full installation even if the download file is not newer"
echo
" -l | list exiting profile names"
echo
echo
"Profile(s):"
echo
" Set one or more valid profile names. By default it loops over all profiles."
echo
" This prameter limits the execution to the given profiles."
echo
" Use option -l to get a list of profiles."
echo
exit
0
;;
f
)
echo
"FORCE update"
defaultupdate
=
1
shift
1
;;
l
)
echo
"LIST of existing profiles:"
getprofiles
echo
exit
0
;;
?
)
echo
"Invalid option: -
${
OPTARG
}
."
exit
2
;;
esac
done
if
[
$#
-eq
0
]
;
then
header
"looping over all profiles"
getprofiles
echo
allprofiles
=
$(
getprofiles
)
else
echo
"SKIP: variable appowner was not set
"
allprofiles
=
"
$*
"
fi
for
myprofile
in
$allprofiles
do
deploy
$myprofile
profile
=
done
rc
=
$?
profile
=
header
"All done."
echo
exiting with statuscode
$rc
exit
$rc
# ----------------------------------------------------------------------
header
"POST tasks"
# what you could do here:
# - start current deploy scripts
# - apply database updates
# - set permissions
# - start service
# - remove maintenance flag
# - send success message as email/ slack/ [another fancy tool]
run_task
"
${
profiledir
}
/tasks_postinstall.sh"
# ----------------------------------------------------------------------
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment