Fork me on GitHub

Herr Knedel/Parádní věci s Atlassianem: Pimp my Bamboo Monitor

Created Mon, 01 Jan 0001 00:00:00 +0000 Modified Sun, 03 Apr 2022 06:45:45 +0000 Schwierigkeitsgrad: Richtig anspruchsvoll

704 Words

Jak mohu vytvořit monitor sestavení pro Bamboo, Jenkins nebo Gitlab? Do večera na to přijdu! Podobný Výukový program pro desky problémů Gitlab jsem již napsal.

Základem tohoto návodu je Raspberry Imager a operační systém “Raspberry Pi OS Lite”. Po instalaci operačního systému lze do Raspberry vložit kartu SD. V mém případě je to Raspberry Pi Zero.

Krok 1: Instalace aplikace Matchbox/Správce oken

K provozu počítače Raspberry v režimu kiosku je zapotřebí správce oken a prohlížeč. Ty se instalují pomocí následujícího příkazu:

x
+
Terminal

$ sudo apt-get install xorg nodm matchbox-window-manager uzbl xinit unclutter vim

Krok 2: Vytvořím uživatele ovládacího panelu

Následujícím příkazem vytvořím nového uživatele s názvem “dashboard”:

x
+
Terminal

$ sudo adduser dashboard

Krok 3: Konfigurace xServeru a Správce oken

Všechny následující kroky je třeba provést v relaci uživatele “dashboard”. Přepínám na relaci s “su”:

x
+
Terminal

$ sudo su dashboard

3.1. ) Tlačítka/funkce

Chci, aby moje Raspberry bylo provozuschopné v režimu kiosku. Za tímto účelem ukládám dva klávesové příkazy, Ctrl Alt X pro terminál a Alt C pro zavření terminálu. V terminálu se můžete zeptat na aktuální IP pomocí ifconfig, vypnout Raspberry pomocí sudo shutdown -h now etc…..

x
+
Terminal

$ cd ~
$ mkdir .matchbox
$ vim .matchbox/kbdconfig

Rozložení klíče je v tomto případě následující:


##  Zkratky pro ovládání oken
<Alt>c=close
<ctrl><alt>x=!xterm

3.2. ) X - zasedání

V souboru “$ vim ~/.xsession” musí být také zadány následující řádky. Tento skript zkontroluje, zda je přístrojový panel přístupný. Pokud není dosažitelný, čeká 10 sekund. Adresu/IP je samozřejmě nutné upravit.

xset -dpms
xset s off

while ! curl -s -o /dev/null https://192.168.178.61:8085/ sleep 10
done
exec matchbox-window-manager -use_titlebar no & while true; do
   
    uzbl -u https://192.168.178.61:8085/telemetry.action -c /home/pi/uzbl.conf
done

Je velmi důležité, aby byl skript spustitelný:

x
+
Terminal

$ sudo chmod 755 ~/.xsession

3.3. ) Společná konfigurace rozhraní

Následující řádky konfigurují webové rozhraní. Prohlížeč je maximalizován a stavový řádek je skrytý.

x
+
Terminal

$ vim ~/uzbl.conf

Obsah:

set socket_dir=/tmp
set geometry=maximized
set show_status=0
set on_event = request ON_EVENT
set show_status=0

@on_event LOAD_FINISH script ~/dashboard/verhalten.js

3.4.) Připraveno

Relace “přístrojové desky” může být ponechána:

x
+
Terminal

$ exit

3.5.) behavior.js a rolovací text

Tento Javascript řídí chování desky. Pokud sestavení nebo test selžou, zobrazí se velké zaškrtávací znaménko. Takto mohu vidět chyby i na dálku.

x
+
Terminal

$ vim ~/verhalten.conf

Obsah:

var bamboobUrl = 'https://ip:port';
var bambooUser = 'nutzer';
var bambooPassword = 'password';
var ticker = jQuery('<marquee direction="left" scrollamount="5" scrolldelay="2" style="display:none;background:#962526;position:fixed;bottom:0;left:0;width:100%;line-height:100px;font-size:80px;"></marquee>');

/*--------------------------Timer--------------------------*/

var Timer = function(intervallInMsec)
{
  this.caller = new Array();
  this.intervall = window.setInterval(
    this.call.bind(this),
    intervallInMsec
  );
};

Timer.prototype.append = function(callFunction)
{
  this.caller.push(callFunction);
};

Timer.prototype.remove = function(callFunction)
{
  var index = this.caller.indexOf(callFunction);
  if (index > -1) 
  {
    this.caller.splice(index, 1);
  }
};

Timer.prototype.call = function()
{
  for(
    var callerIndex = 0, callerLenght = this.caller.length;
    callerIndex < callerLenght;
    callerIndex++
  ) {
    this.caller[ callerIndex ].call();
  }
};

var timer = new Timer(10000);
jQuery('body').append(ticker);

/* login verhalten */
timer.append(
  function()
  {
    if (jQuery('#loginForm_os_username').length > 0)
    {
      jQuery('#loginForm_os_username').val(bambooUser);
      jQuery('#loginForm_os_password').val(bambooPassword);
      jQuery('#loginForm_save').click();
    }
    else if (jQuery('.aui-dropdown2-trigger-group').length > 0)
    {
      window.location.href = window.gitlabUrl + '/telemetry.action';
    }
  }
);

/* roter ticker */
timer.append(
  function()
  {
    if (jQuery('.Failed').length > 0)
    {
      var failedJobs = new Array();

      jQuery.each(
        jQuery('.Failed'),
        function() {
          failedJobs.push( jQuery(this).children('.plan-name').text() + ' (' + jQuery(this).find('time').text() + ')');
        }
      );
      var text = 'Fehlerhafte Jobs: ' + failedJobs.join(' | ');
      if( jQuery(ticker).text() !== text) 
      {
          jQuery(ticker).html('<span>' + text + '</span>');
          jQuery(ticker).show();
      }
      
    }
    else
    {
        jQuery(ticker).hide();
    }
  }
);


Samozřejmě můžete zabudovat libovolné chování, například restartování neúspěšných testů.

4. autologue do relace X

Dalším krokem je nastavení automatického přihlášení. Tento soubor je pro tento účel upraven:

x
+
Terminal

$ sudo vim /etc/default/nodm

Zde se zadá přihlašovací uživatel “dashboard” a deaktivuje se správce zobrazení:

# nodm configuration
# Set NODM_ENABLED to something different than 'false' to enable nodm
NODM_ENABLED=true # <-- hier muss true hin

# User to autologin for
NODM_USER=dashboard # <-- hier muss dashboard hin

# First vt to try when looking for free VTs
NODM_FIRST_VT=7
# X session
NODM_XSESSION=/etc/X11/Xsession
# Options for the X server
NODM_X_OPTIONS='-nolisten tcp'
... usw

Poté lze systém restartovat.

x
+
Terminal

$ sudo reboot

Připraveno

Každý dasboard by měl být restartován jednou denně. Vytvořil jsem pro to cron.