Fork me on GitHub

Herr Knedel/Parádne veci s Atlassian: Pimp my Bamboo Monitor

Created Mon, 01 Jan 0001 00:00:00 +0000 Modified Sun, 03 Apr 2022 06:46:21 +0000 Úroveň obtiažnosti: Naozaj náročné

706 Words

Ako môžem vytvoriť monitor zostavenia pre Bamboo, Jenkins alebo Gitlab? Do večera na to prídem! Už som napísal podobný Výukový program pre nástenky problémov Gitlab.

Základom tohto návodu je Raspberry Imager a operačný systém “Raspberry Pi OS Lite”. Po nainštalovaní operačného systému môžete do Raspberry vložiť kartu SD. V mojom prípade je to Raspberry Pi Zero.

Krok 1: Inštalácia aplikácie Matchbox/Správca okien

Na prevádzku Raspberry v režime kiosku je potrebný správca okien a prehliadač. Tie sa inštalujú pomocou nasledujúceho príkazu:

x
+
Terminal

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

Krok 2: Vytvorím používateľa ovládacieho panela

Nasledujúcim príkazom vytvorím nového používateľa s názvom “dashboard”:

x
+
Terminal

$ sudo adduser dashboard

Krok 3: Konfigurácia xServeru a Správcu okien

Všetky nasledujúce kroky sa musia vykonať v relácii používateľa “dashboard”. Prepnem na reláciu s “su”:

x
+
Terminal

$ sudo su dashboard

3.1. ) Tlačidlá/funkcie

Chcem, aby moja Raspberry mohla fungovať v režime kiosku. Na tento účel som uložil dva príkazy klávesov, Ctrl Alt X pre terminál a Alt C na zatvorenie terminálu. V termináli sa môžete opýtať na aktuálnu IP pomocou ifconfig, vypnúť Raspberry pomocou sudo shutdown -h now etc…..

x
+
Terminal

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

Rozloženie kľúča je v tomto prípade nasledovné:


##  Skrátené operácie s oknami
<Alt>c=close
<ctrl><alt>x=!xterm

3.2. ) X - zasadnutie

V súbore “$ vim ~/.xsession” musia byť zadané aj nasledujúce riadky. Tento skript skontroluje, či je prístrojový panel prístupný. Ak nie je dosiahnuteľný, počká 10 sekúnd. Samozrejme, je potrebné upraviť adresu/IP.

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 veľmi dôležité, aby bol skript spustiteľný:

x
+
Terminal

$ sudo chmod 755 ~/.xsession

3.3. ) Spolukonfigurácia rozhrania

Nasledujúce riadky konfigurujú webové rozhranie. Prehliadač je maximalizovaný a stavový riadok 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.) Pripravené

Revíziu “prístrojovej dosky” môžete ponechať:

x
+
Terminal

$ exit

3.5.) behavior.js a rolovanie textu

Tento Javascript riadi správanie dosky. Ak zostavenie alebo test zlyhajú, zobrazí sa veľký symbol. Takto môžem vidieť chyby aj z väčšej vzdialenosti.

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();
    }
  }
);


Samozrejme, môžete do neho zapracovať ľubovoľné správanie, napríklad reštartovanie neúspešných testov.

4. autologue do relácie X

Ďalším krokom je nastavenie automatického prihlásenia. Tento súbor je prispôsobený na tento účel:

x
+
Terminal

$ sudo vim /etc/default/nodm

Tu sa zadá prihlasovací používateľ “dashboard” a deaktivuje sa správca zobrazenia:

# 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

Systém sa potom môže reštartovať.

x
+
Terminal

$ sudo reboot

Pripravené

Každý dasboard by sa mal reštartovať raz denne. Vytvoril som na to cron.