VersionVisualizer (VV)
Detta är ett verktyg som frågar aktiva instanser i en miljö efter applikationsinformation såsom version, men där kan även finnas annan intressant information som VM-information, java-version, upptid, etc. Informationen används sedan för att uppdatera en confluence-sida.
VV konfigureras med hjälp av en yaml-fil som innehåller information för confluence (vilken sida och inloggningsuppgifter), loggning samt vilka instanser som skall tillfrågas och hur informationen skall tolkas.
Â
Här är ett exempel på en konfiguration som läser två vp-noder i dev-miljön.
---
confluence_settings:
url: https://inera.atlassian.net/wiki/
username: <confluence_username>
password: <secret_password_or_api_token>
pageid: <numeric_pageid>
log_config:
version: 1
formatters:
simple:
format: '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
handlers:
formatter: simple
stream: ext://sys.stdout
loggers:
VersionVisualizer:
level: INFO
handlers: [ console ]
propagate: no
node_settings:
# VP Dev 2 noder
- cfg:
parser: JsonInfoUpdater
url_template: "http://ind-{env}-{cluster}{nr}.ind1.sth.basefarm.net:{port}/{status_uri}"
status_uri: status
cluster: vp
port: 8080
env: dtjp
nodes: 2
response_map:
name: Name
version: Version
javaVersion: JavaVersion
För att återanvända delar av en konfiguration så kan avancerade yaml-funktioner som referensvariabler användas, se en skarp settings.yaml (ex internal_node_settings.yaml
i repot) längst ner i filen för exempel.
Bygge och publicering av release till Nexus
Versionsnumrering
Filen setup.py
har en konstant kallad VV_VERSION
som håller versionsnumret för VV (I skrivande stund 1.3). Uppdatera värdet om en ny release ska byggas. Värdet används ex när whl-filen skapas, och styr huruvida man ersätter befintliga artefakter i Nexus (om versionsnumret är samma som det gamla) eller skapar nya (om man uppdaterat versionsnumret).
Bygg och publicera
För följande kommandon antas att working dir är VersionVisualizer, och att de körs som Admin på WIndows och sudo eller root på Linux. Dessa skript finns också incheckade med källkoden i repot (https://bitbucket.drift.inera.se/projects/NTJP/repos/versionvisualizer/)
Linux:
# Activate the env
VV2ENV/bin/activate
# Set up VENV
python -m pip install --upgrade pip build pip2pi # First time only
# Build whl and bundle deps
python -m build
python -mpip wheel --wheel-dir wheels dist/*.whl
dir2pi wheels
# Upload to Nexus
cd wheels
for whl in \$(find simple -name '*.whl')
do
curl --fail -u ${CREDENTIALS} --upload-file \$whl https://nexus.drift.inera.se/repository/maven-snapshots/se/inera/ntjp/pypi/\$whl
done
Windows:
# Activate the env
venv/Scripts/activate.ps1
# Set up VENV
python -m pip install --upgrade pip build pip2pi # First time only
# Build whl and bundle deps
python -m build
python -mpip wheel --wheel-dir wheels $('dist/' + (Get-ChildItem dist/*.whl -Name))
dir2pi wheels
# Upload to Nexus
cd wheels
$creds = Get-Credential -Message "Specify username and pwd for the Nexus repo (Basefarm)"
foreach ($file in (Get-ChildItem simple/*.whl -Recurse))
{
$parameters = @{
Uri = "https://nexus.drift.inera.se/repository/maven-snapshots/se/inera/ntjp/pypi/simple/$($file.Directory.Name)/$($file.Name)"
InFile = "$((Get-Location))\$($file.Name)" # Use the actual file, not the symlink. It's located a level up, in the wheels folder
Credential = $creds
Method = 'Put'
ContentType = 'application/zip'
}
Invoke-WebRequest @parameters
}
Â
Deployment i produktion
Efter fullgjord publicering på Nexus enligt ovan, logga in på ind-ptjp-misc1.ind1.basefarm.net
och gör ev uppdatering av yaml-filer under /opt/VersionVisualizer2/settings.d
. Därefter körs /opt/VersionVisualizer2/run.sh
som då laddar ner senaste versionen av VV, synkar yaml-filer och startar VersionVisualizer för varje hittad yaml-fil.
Första installation
VV är skrivet för python 3.6 (och senare) och distribueras i form av en whl som kan installeras med pip. Det kan vara bra att installera VV tillsamman med dess beroenden i en virtuel python-miljö, en sk venv. Följande steg används då:
Â