Bamboo, Jenkins veya Gitlab için nasıl bir derleme monitörü oluşturabilirim? Bu gece bir yolunu bulacağım! Zaten benzer bir Gitlab-Issue-Boards için Öğretici yazmıştım.
Bu eğitimin temeli Raspberry Imager ve “Raspberry Pi OS Lite” işletim sistemidir. İşletim sistemi kurulduktan sonra SD kart Raspberry’ye takılabilir. Benim durumumda, bu bir Raspberry Pi Zero.
Adım 1: Matchbox/Window Manager’ı yükleyin
Bir Raspberry’yi kiosk modunda çalıştırmak için bir pencere yöneticisi ve bir tarayıcı gereklidir. Bunlar aşağıdaki komut ile kurulur:
$ sudo apt-get install xorg nodm matchbox-window-manager uzbl xinit unclutter vim
Adım 2: Bir gösterge tablosu kullanıcısı oluşturuyorum
Aşağıdaki komut ile “dashboard” adında yeni bir kullanıcı oluşturuyorum:
$ sudo adduser dashboard
Adım 3: xServer ve Pencere Yöneticisi Yapılandırması
Aşağıdaki tüm adımlar “dashboard” kullanıcı oturumunda gerçekleştirilmelidir. “su” ile oturuma geçiyorum:
$ sudo su dashboard
3.1. ) Düğmeler/Fonksiyon
Raspberry’min kiosk modunda çalışabilmesini istiyorum. Bunu yapmak için, terminal için Ctrl Alt X ve terminali kapatmak için Alt C olmak üzere iki tuş komutu kaydediyorum. Terminalde ifconfig ile mevcut IP’yi sorgulayabilir, sudo shutdown -h now etc….. ile Raspberry’yi kapatabilirsiniz.
$ cd ~
$ mkdir .matchbox
$ vim .matchbox/kbdconfig
## Pencere işlemi kısa yolları
<Alt>c=close
<ctrl><alt>x=!xterm
3.2. ) X - Oturum
Aşağıdaki satırlar da “$ vim ~/.xsession” dosyasına girilmelidir. Bu kod, gösterge tablosunun erişilebilir olup olmadığını kontrol eder. Eğer ulaşılamıyorsa, 10 saniye bekler. Tabii ki, adres/IP ayarlanmalıdır.
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
Komut dosyasının çalıştırılabilir olması çok önemlidir:
$ sudo chmod 755 ~/.xsession
3.3. ) Arayüz ortak konfigürasyonu
Aşağıdaki satırlar web arayüzünü yapılandırır. Tarayıcı büyütülür ve durum çubuğu gizlenir.
$ 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.) Bitti
“Gösterge tablosu” oturumu bırakılabilir:
$ exit
3.5.) behaviour.js ve kayan metin
Bu Javascript panonun davranışını kontrol eder. Derleme veya test başarısız olursa, büyük bir ticker görüntülenir. Bu şekilde uzaktan bile hataları görebiliyorum.
$ 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();
}
}
);
Elbette, başarısız testleri yeniden başlatmak gibi istediğiniz herhangi bir davranışı oluşturabilirsiniz.
4. X oturumu içine otomatikolog
Bir sonraki adım otomatik oturum açmayı ayarlamaktır. Bu dosya bu amaç için uyarlanmıştır:
$ 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
Sistem daha sonra yeniden başlatılabilir.
$ sudo reboot
Hazır
Her bir dasboard günde bir kez yeniden başlatılmalıdır. Bunun için bir cron oluşturdum.