Blog

Als je met Stash/Git werkt kun je op twee manieren authenticeren:

  1. HTTP
  2. SSH

Het is normaal om voor de eerste connectie HTTP te gebruiken, het heeft echter twee beperkingen:

  1. De push wordt over HTTP vertaald naar een POST en de POST-body-grootte is gelimiteerd, daarnaast kan er een HTTP-timeout optreden als een push teveel content bevat.
  2. Als je in Jenkins een connectie naar je Git repository wilt hebben moet je daar je eigen credentials achter laten.

Het is dus raadzaam om SSH te gebruiken zodat je geen last hebt van de HTTP-limiet en niet je eigen username/wachtwoord in Jenkins hoeft te stoppen.

Maak een RSA-key aan (twee delen: public en private key, dat doe je met ssh-keygen of PuTTYgen) en bewaar je private key in een .ssh map die je in je profiel-folder zet. Zorg dat je map en je private key alleen leesbaar zijn voor jouw user, dat doe je in linux, mac of git-bash:

chmod 700 .ssh
chmod 600 .ssh/naam-van-je-private-key

SSH maakt gebruik van het public/private-key systeem waarbij je je private key zelf houdt - vandaar die permissies - en je public key registreert bij je persoonlijke profiel in Stash (zie de Stash documentatie en voor Windows gebruikers eventueel Installing Git on Windows of Configuring Git SSH on Windows).

Daarmee lossen we beperking 1 op maar dan moet je nog je eigen key-set aan Jenkins geven, gelukkig is dat niet nodig: Jenkins heeft een key waarmee automatische leestoegang is tot alle OOSE-repositories, je vindt deze in Jenkins terug onder de naam "mdkr" (toegegeven, die had beter gekund):

Je gebruikt in Jenkins dus elke keer dezelfde key (mdkr), in je project gebruik je je eigen key om snel en veilig te kunnen werken. 

 

 

Voor alle OOSE groepen staat een nightly klaar in Jenkins die gekoppeld is aan het Maven project dat meegeleverd is in de git repository. Maar krijg je nu je codekwaliteit zichtbaar in Sonar? Het antwoord is deels afhankelijk van het platform en de build-tool die je gebruikt.

Java projecten die gebouwd worden met Maven

  1. Zet testcode in src/test/java en broncode in src/main/java.
  2. Check of de jacoco-plugin is opgenomen in de pom.xml (zit er standaard in bij het leveren van de git repository maar wellicht is deze verwijderd):

    <plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <version>0.7.8</version>
        <configuration>
            <destFile>${basedir}/target/jacoco.exec</destFile>
            <dataFile>${basedir}/target/jacoco.exec</dataFile>
        </configuration>
        <executions>
            <execution>
                <goals>
                    <goal>prepare-agent</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
  3. Pas de Jenkins job aan, standaard doet deze

    clean

    maak hiervan

    clean package


    Zie je geen test-coverage in SQ, wijzig de aanroep in Maven dan naar:

    clean org.jacoco:jacoco-maven-plugin:prepare-agent package
  4. Run de job een keer handmatig. Als deze job groen is, voeg dan een "Build step" toe (na de build, als Post Build Step dus) die heet: Execute SonarQube Scanner
  5. Vul het veld "Analysis Properties". Kies ook de juiste SonarQube versie (Windows als je geen slave gebruikt, Linux als je wel een slave/label gebruikt). Hieronder een voorbeeld-inhoud, pas in elk geval de key en de naam van je project aan:

    # Required metadata
    sonar.projectKey=groupId van je Maven-project
    sonar.projectName=artifactId van je Maven-project
    sonar.projectVersion=1.0
     
     
    # Comma-separated paths to directories with sources (required)
    sonar.sources=src/main/java
    sonar.tests=src/test/java
    sonar.dynamicAnalysis=reuseReports
    sonar.pitest.mode=reuseReport
    sonar.java.coveragePlugin=jacoco
    sonar.binaries=target
    sonar.java.binaries=target/classes
    
    
    # Language
    sonar.language=java
     
     
    # Encoding of the source files
    sonar.sourceEncoding=UTF-8
    sonar.login=student
    sonar.password=student
  6. Run de job nog een keer handmatig. Als deze job groen is je naar Sonar en bekijk je het resultaat. 

Java projecten die gebouwd worden met Gradle

  1. Zet testcode in src/test/java en broncode in src/main/java.
  2. Check of de jacoco-plugin is opgenomen in de build.gradle, zie o.a. deze voorbeelden hoe je dit aan kunt pakken.
  3. Pas de Jenkins job aan: verwijder de Maven build step en voeg een Invoke Gradle Script toe. Run de task jacocoTestReport.

  4. Run de job een keer handmatig. Als deze job groen is, voeg dan een "Build step" toe die heet: Invoke Standalone SonarQube Analysis
  5. Maak gebruik van het zelfde .properties bestand als bij Maven hierboven. 
  6. Run de job nog een keer handmatig. Als deze job groen is je naar Sonar en bekijk je het resultaat. 

Niet-Java projecten die gebouwd worden met iets anders dan Maven of Gradle

  1. Zet testcode en broncode is een eigen mappenstructuur, bijvoorbeeld src en test
  2. Pas de Jenkins job aan: verwijder de Maven build step en voeg een aanroep naar je build-tool toe (bijv. MSBuild, phpcomposer, npm, cmake, etc.)
  3. Run de job een keer handmatig. Als deze job groen is, voeg dan een "Build step" toe die heet: Invoke Standalone SonarQube Analysis
  4. Zorg dat je in de root van je project een bestand zet dat sonar-project.properties heet en vermeld hier o.a. de taal waarin je werkt, de plaats van de broncode staat (src) en de plaats waar de tests (test) staan. Voeg indien beschikbaar ook toe op welke locaties rapporten te vinden zijn van bijvoorbeeld cppcheck, cpptest, phpdepend, phpunit en vermeld dat in dit .properties bestand. Voor voorbeelden zie de github van sonar. Een voorbeeld voor hoe dat met C++ kan vind je op Jenkins: http://ci.icaprojecten.nl/jenkins/job/OOSE-R_RobotWorld_test/

 

 

 

Starting today you can draw UML diagrams in Astah (Community) and display the diagrams in Confluence. This way you have a good alternative for the built-in Gliffy editor that uses Flash and works in your browser. Create your UML diagram in Astah, and attach your Astah diagram to the page:

Then modify the page in Confluence and start editing the page. Using the Macro Browser (Insert->Other Macro's, or start typing a { ) you can insert your diagram and your diagram is on the wiki.

Using the macro you don't need to export the diagram to PNG/JPEG!