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:
$ 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”:
$ sudo adduser dashboard
Samm 3: Konfiguratsioon xServer ja Window Manager
Kõik järgmised sammud tuleb teha “armatuurlaua” kasutajaseansis. Ma vahetan sessiooni “su”:
$ 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.
$ cd ~
$ mkdir .matchbox
$ vim .matchbox/kbdconfig
## 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:
$ sudo chmod 755 ~/.xsession
3.3. ) Liidesekonfiguratsioon
Järgmised read konfigureerivad veebiliidese. Brauser on maksimeeritud ja olekuriba on peidetud.
$ vim ~/uzbl.conf
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:
$ 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.
$ vim ~/verhalten.conf
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:
$ sudo vim /etc/default/nodm
# 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.
$ sudo reboot
Valmis
Iga armatuurlaud tuleb kord päevas uuesti käivitada. Olen loonud selleks croni.