Fork me on GitHub

Herr Knedel/Atlassian ile harika şeyler: Bamboo Monitörümü Pimp

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

680 Words

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:

x
+
Terminal

$ 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:

x
+
Terminal

$ 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:

x
+
Terminal

$ 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.

x
+
Terminal

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

Bu durumda anahtar düzeni aşağıdaki gibidir:


##  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:

x
+
Terminal

$ 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.

x
+
Terminal

$ vim ~/uzbl.conf

İçerik:

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:

x
+
Terminal

$ 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.

x
+
Terminal

$ vim ~/verhalten.conf

İçerik:

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:

x
+
Terminal

$ sudo vim /etc/default/nodm

Oturum açma kullanıcısı “dashboard” buraya girilir ve ekran yöneticisi devre dışı bırakılır:

# 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.

x
+
Terminal

$ sudo reboot

Hazır

Her bir dasboard günde bir kez yeniden başlatılmalıdır. Bunun için bir cron oluşturdum.