CMake, C++, Jenkins/Continuous integration

Habe ich ein cmake-Beispielprojekt, das würde ich gerne bauen auf dem Jenkins läuft auf Ubuntu 15.10. Ich habe installiert:

https://wiki.jenkins-ci.org/display/JENKINS/CMake+Plugin

Erstellt und zwei build-Schritte:

  1. Cmake zu generieren makefiles
  2. Laufen alle aus dem build-dir

CMake, C++, Jenkins/Continuous integration

Ich gut funktioniert:

[build] $ cmake -G "Unix Makefiles" -D CMAKE_BUILD_TYPE=Debug /var/lib/jenkins/workspace/cmake-test/cmake-gtest/src
-- Configuring done
-- Generating done
-- Build files have been written to: /var/lib/jenkins/workspace/cmake-test/cmake-gtest/build
[build] $ /usr/bin/make
[  4%] Built target libfoo
[  9%] Built target libbar
[ 14%] Built target myApp
[ 52%] Built target gmock
[ 90%] Built target gtest
[100%] Built target testfoo
[cmake-test] $ /bin/sh -xe /tmp/hudson1792271459427590561.sh
+ cd cmake-gtest/build
+ make all
[  4%] Built target libfoo
[  9%] Built target libbar
[ 14%] Built target myApp
[ 52%] Built target gmock
[ 90%] Built target gtest
[100%] Built target testfoo
Finished: SUCCESS

Aber ist dies die empfohlene Methode für die Verwendung von cmake in einer CI/Jenkins-setup?

Derzeit mein cmake/Jenkins-build wird auf jedem drücken; 1) erzeugen der makefiles, 2) erstellen Sie das Projekt.

Ich bin ein bisschen besorgt, dass der erste Schritt 1) das generieren von makefiles würde Essen, bis die build-Zeit und es scheint nicht wirklich das optimale zu tun Sie diesen Schritt auf jedem push. Vor allem, da würde ich nicht erwarten, zu ändern CMakeLists.txt Dateien, die oft, aber wenn Sie sich ändern, neue Dateien erzeugt, sollte der natürlich benutzt werden.

Ist der obige Ansatz Verfahren, dass ich nur noch gewöhnen, oder habe ich etwas verpasst?

  • Die "Erzeugung von makefile" nehmen Sie ausreichend Zeit, sich sorgen zu machen? Während es nicht sein kann, ändern sich sehr oft, dass ein separater Schritt oder vermasselt die bauen, wenn es änderungen gibt ist wirklich keine schöne Lösung ...
  • Ja das ist auch meine Sorge, Vorsicht ist besser als Nachsicht, würde eine Lösung sein, um sicherzustellen, Sie brechen meine Anwendung in kleinere Teile schneller, wenn es wächst. Regading die beiden bauen obigen Schritten 1) cmake generieren, 2) führen Sie alle ist es irgendwie etwas zu tun, dass Sie als Teil der code-Generierung? Oder sind Sie völlig unabhängig und sollten so behandelt werden?
  • Ich bin mir nicht ganz sicher, was Ihr bittet. Meine Haltung im Allgemeinen, ist auf die einfachste Lösung, die ausreichend ist, um lösen das aktuelle problem", und nicht erschweren etwas, bis Sie wirklich einen guten Grund haben. Ich betreibe drei verschiedene jobs auf meinem Jenkins-system (zu Hause): "Bauen + führen Sie alle tests mit clang++", "Bauen + führen Sie alle tests mit g++" - diesen check alle 15 Minuten auf neue commits im git repo, und die Dritte ist, laden Sie die version von LLVM und mein code und bauen Sie alle zusammen, basierend auf einem build-Skript in das Projekt - einmal in der Nacht.
  • Aus den obigen screenshot habe ich zwei build-Schritte: 1: erzeugen makefiles, 1: run machen. Ich Frage mich nur, wenn es getan werden könnte, in einem Schritt, und wenn cmake hat einige post-Schritt-Befehl für das eigentliche bauen, nachdem die Dateien generiert worden sind.
  • Scheint sinnvoll, der Sie benötigen, zu tun beide trotzdem. Der einzige Vorteil, der sich aus zwei teilen ist, wenn es dauert lange genug, dass der Start von einem anderen Aufbau des Codes, bevor der test beendet wurde, oder so.
  • Wenn Sie einige Variablen in Ihrem CMakeLists.txt (wie Versionierung Variablen), dann benötigen Sie für die Erstellung Ihrer make-Datei jedes mal zu aktualisieren, Ihre Versionsverwaltung Variablen

InformationsquelleAutor u123 | 2016-02-27
Schreibe einen Kommentar