Jenkins


Jenkins jest narzędziem służącym do automatyzacji budowania, testowania i deploymentu projektów. Aby uzyskać dostęp należy w systemie helpdeskowym założyć nowe zgłoszenie zawierające:

  • login (sXXXXXX) osoby odpowiedzialnej za projekt
  • nazwę projektu składającą się tylko z liter, cyfr, - i _
  • loginy wszystkich osób mających mieć dostęp do projektu w Jenkinsie

System dostępny jest pod adresem https://jenkins.wmi.amu.edu.pl. Logowanie odbywa za pomocą poświadczeń domenowych (jak w laboratoriach).

Konfiguracja Git

Możliwe jest połączenie Jenkinsa z wydziałowym systemem Git. W tym celu należy skonfigurować pipeline Jenkinsa oraz samo repozytorium.

Konfiguracja Jenkins

  • otworzyć folder semestru i przejść do swojego projektu -> Configure
  • Gogs Webhook
    • Use Gogs secret
    • Secret: długi łańcuch znaków
  • Build Triggers
    • Build when a change is published to Gogs
  • Pipeline
    • Definition: Pipeline script from SCM
    • SCM: Git
    • Repository URL: adres SSH repozytorium (np. git@git.wmi.amu.edu.pl:s123456/projekt.git)
    • Credentials: git (SSH read-only access for git.wmi.amu.edu.pl)
    • Repository browser: Gitea
    • URL: adres HTTPS repozytorium (bez .git na końcu) (np. https://git.wmi.amu.edu.pl/s123456/projekt)
    • Lightweight checkout
    • Save

Konfiguracja repozytorium Git

W konfiguracji repozytorium Git:

  • Settings -> Webhooks -> Add Webhook -> Gogs
  • Deploy Keys -> Add Deploy Key
    • Title: jenkins
    • Content: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOuVvhUjr+UosOx3IEBUi0IfV8Erv2OL3Er5pUHbjxNo

Obsługa SSH z poziomu pipeline

Możliwe jest dodanie obsługi połączeń do zewnętrznego hosta SSH z poziomu pipeline. Docelowym zastosowaniem może być kopiowanie zbudowanej i przetestowanej wersji projektu oraz wykonanie akcji na serwerze, na przykład zrestartowanie serwera WWW.

Klucz publiczny używany przez Jenkins do zewnętrznych połączeń SSH:

ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKRso2eJ1wXHqD83Ii8Qem0kDWY5sCFVS6OczBpOPT+66nvOt5Z0VNajjZLkA5BXh0ZoZ+RqDQdi4JMndPvcEwY= jenkins-ssh-external

Zgłoszenie

W celu aktywacji tej funkcji konieczne jest założenie nowego zgłoszenia w systemie helpdeskowym zawierającego:

  • nazwę projektu Jenkins
  • nazwę hosta SSH
  • nazwę użytkownika używanego do połączenia SSH (musi akceptować powyższy klucz SSH)
  • ścieżkę bezwzględną do katalogu używanego jako roboczy przy połączeniu SSH

W odpowiedzi zostanie przesłana nazwa konfiguracji, którą należy użyć w Jenkinsfile zgodnie z dokumentacją.

Przykładowa implementacja Jenkinsfile

Kopiowanie plików przez SSH

Poniższa sekcja spowoduje przesłanie pliku build.tar.gz na docelowy serwer SSH:

stage('SSH-publish') {
    steps {
        sshPublisher(
            continueOnError: false, 
            failOnError: true,
            publishers: [
                sshPublisherDesc(
                configName: "NAZWA_KONFIGURACJI_Z_ODPOWIEDZI_NA_ZGŁOSZENIE_HELPDESK",
                transfers: [sshTransfer(sourceFiles: 'build.tar.gz')],
                verbose: true
                )
            ]
        )
    }
}

Wykonanie zdalnej akcji przez SSH

Poniższa sekcja spowoduje skasowanie pliku build.tar.gz poprzez SSH

stage('SSH-exec') {
    steps {
        sshPublisher(
            continueOnError: false, 
            failOnError: true,
            publishers: [
                sshPublisherDesc(
                configName: "NAZWA_KONFIGURACJI_Z_ODPOWIEDZI_NA_ZGŁOSZENIE_HELPDESK",
                transfers: [sshTransfer(execCommand: 'rm build.tar.gz')],
                verbose: true
                )
            ]
        )
    }
}