Fork me on GitHub

Herr Knedel/Lahedad asjad koos Atlassianiga: Pimp my Bamboo Monitor

Created Mon, 01 Jan 0001 00:00:00 +0000 Modified Sat, 01 Oct 2022 10:30:02 +0000 Schwierigkeitsgrad: Richtig anspruchsvoll

661 Words

Kuidas luua Bamboo, Jenkinsi või Gitlabi jaoks buildmonitor? Ma mõistan selle välja täna õhtuks! Olen juba kirjutanud sarnase Juhend Gitlab Issue Boards jaoks.

Selle õpetuse aluseks on Raspberry Imager ja operatsioonisüsteem “Raspberry Pi OS Lite”. Pärast operatsioonisüsteemi paigaldamist saab SD-kaardi sisestada Raspberry’sse. Minu puhul on see Raspberry Pi Zero.

Samm 1: Paigaldage Matchbox/Window Manager

Vaarika käitamiseks kioskirežiimis on vaja aknahaldurit ja brauserit. Need paigaldatakse järgmise käsuga:

x
+
Terminal

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

2. samm: Loen armatuurlaua kasutaja

Järgmise käsuga loen uue kasutaja nimega “armatuurlaud”:

x
+
Terminal

$ sudo adduser dashboard

Samm 3: Konfiguratsioon xServer ja Window Manager

Kõik järgmised sammud tuleb teha “armatuurlaua” kasutajaseansis. Ma vahetan sessiooni “su”:

x
+
Terminal

$ sudo su dashboard

3.1. ) Nupud/Funktsioon

Ma tahan, et mu Vaarikas oleks kioskirežiimis kasutatav. Selleks salvestan ma kaks klahvikäsku: Ctrl Alt X terminali avamiseks ja Alt C terminali sulgemiseks. Terminalis saab küsida praeguse IP-ga ifconfig, sulgeda Vaarikas sudo shutdown -h nüüd jne….. abil.

x
+
Terminal

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

Selle juhtumi puhul on võtmete paigutus järgmine:


##  Akna operatsiooni lühikeste lõigete tegemine
<Alt>c=close
<ctrl><alt>x=!xterm

3.2. ) X - Seanss

Järgmised read tuleb sisestada ka faili “$ vim ~/.xsession”. See skript kontrollib, kas armatuurlaud on juurdepääsetav. Kui see ei ole kättesaadav, ootab ta 10 sekundit. Loomulikult tuleb aadressi/IP-d kohandada.

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

On väga oluline, et skript oleks käivitatav:

x
+
Terminal

$ sudo chmod 755 ~/.xsession

3.3. ) Liidesekonfiguratsioon

Järgmised read konfigureerivad veebiliidese. Brauser on maksimeeritud ja olekuriba on peidetud.

x
+
Terminal

$ vim ~/uzbl.conf

Sisu:

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.) Valmis

“Armatuurlaua” seansi võib jätta:

x
+
Terminal

$ exit

3.5.) behaviour.js ja teksti kerimine

See Javascript kontrollib tahvli käitumist. Kui ehitamine või testimine ebaõnnestub, kuvatakse suur ticker. Nii näen ma vigu isegi eemalt.

x
+
Terminal

$ vim ~/verhalten.conf

Sisu:

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


Loomulikult saate sisse ehitada mis tahes soovitud käitumise, näiteks ebaõnnestunud testide taaskäivitamise.

4. autologeerimine X-seansse.

Järgmine samm on automaatse sisselogimise seadistamine. See fail on selleks kohandatud:

x
+
Terminal

$ sudo vim /etc/default/nodm

Siin sisestatakse sisselogimise kasutaja “armatuurlaud” ja ekraanihaldur on deaktiveeritud:

# 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

Seejärel saab süsteemi taaskäivitada.

x
+
Terminal

$ sudo reboot

Valmis

Iga armatuurlaud tuleb kord päevas uuesti käivitada. Olen loonud selleks croni.