Skip to end of metadata
Go to start of metadata

Huom: ohjausta tehtävien tekoon to 13-16 ja pe 9.30-15 salissa B221

Tehtävien palautuksen deadline su 18.3. klo 23.59

Miten viikon 1 tehtävät palautetaan?

  • GitHubin, Jenkinsin ja tehtävän 9 "palautuslomakkeen" avulla! Eli teet kaiken mitä alla sanotaan, se riittää, kenellekään ei tarvitse näyttää mitään.
  • tämän viikon tehtävät ovat lähes luennoista riippumattomia, luentomateriaalista ei tehtäviin ole apua, kaikki tarvittava materiaali on linkitettetty tehtävien yhteyteen

1 Githubiin

Tee itsellesi tunnus GitHubiin

Luo repositorio nimellä ohtu-viikko1

  • valitse New repository

hae akateemista tunnusta, näin saat käyttöösi (ilmaiseksi) yksityisiä repositorioita

Luo paikalliselle koneellesi ssh-avain (tapahtuu komentoriviltä käsin)

Lisää avaimen julkinen pari githubiin:

Näin pystyt käyttämään GitHubia ilman salasanan syöttämistä koneelta jossa juuri luodun avaimen salainen pari löytyy

Konfiguroi nimesi ja emailosoitteesi paikallisen koneesi git:iin antamalla komennot:

  • git config --global user.name "Your Name"
  • git config --global user.email matti.luukkainen@gmail.com

Luo paikallinen repositorio ja liitä GitHubin repositorio siihen

  • eli toimi kohdan Next steps mukaan

2 Gitin alkeet

tee seuraavat:

  • alusta johonkin paikalliseen hakemistoosi git-repositorio
  • lisää ja committaa repositorioon kaksi tiedostoa ja hakemistoa joiden sisällä on tiedostoja
    • muista hyödyllinen komento git status
  • muuta ainakin kahden tiedoston sisältöä ja committaa muutokset repositorioon
  • tee .gitignore-tiedosto jossa määrittelet että repositorion juurihakemistossa olevat tiedostot joiden pääte on xxx ja hakemisto jonka nimi on target ignoroidaan
  • lisää xxx-päätteisä tiedostoja repositorioon ja varmista että git jättää ne huomioimatta
  • lisää myös hakemisto nimeltä target ja varmista että se ei mene versionhallinnan alaisuuteen
  • tee muutos tiedostoon, älä lisää tiedostoa "staging"-alueelle
    • peru muutos (git status -komento antaa vihjeen miten tämä tapahtuu)
  • tee muutos ja lisää tiedosto "staging"-alueelle
    • peru muutos (git status -komento antaa vihjeen miten tämä tapahtuu)

3 Tiedostojen lisääminen GitHubiin

Tehtävässä 1 tehtiin GitHubiin repostorio joka liitettiin paikalliselle koneelle luotuun repositorioon "remote repositoryksi".

  • Lisää nyt tehtävässä 1 paikalliselle koneelle tehtyyn repositorioon muutama tiedosto. 
  • "pushaa" nämä GitHubissa olevaan etärepositorioon antamalla komento "git push"
  • varmista selaimella että lisätyt tiedostot menevät GitHubiin

4 GitHubissa olevan repositorion kloonaaminen

Yleensä on tapana pitää GitHubissa olevaa repositorioa tiedostojen "keskitettynä" sijoituspaikkana ja liittää paikallisella koneella oleva repositorio GitHubissa olevan repositorion etärepostitorioksi. Tehtävässä 1 tehty tapa (git remote add...) on yksi keino liittää GitHubissa oleva repositorio paikallisen koneen repositorion remoteksi. Toinen tapa on kloonaaminen. Vaikka yleensä yhdestä GitHub-repositoriosta riittää yksi paikallinen kopio, kloonataan nyt harjoituksen vuoksi tehtävässä 1 repositorio paikalliselle koneelle.

  • mene komentoriville ja esim hakemistoosi  (tai johonkin paikkaan joka ei ole git-repositorio)
  • anna komento git clone git@github.com:githubtunnus/repositorionNimi.git nimiKloonille
    • githubtunnus ja repositorionNimi ovat selviävät GitHubista repositoriosi sivulta
    • nimiKloonille tulee olemaan kloonatun repositorion nimi, varmista että annat nimen jonka nimistä tiedostoa tai hakemistoa ei ole
  • mene kloonattuun repositorioon, lisää sinne jotain tiedostoja ja committaa
  • "pushaa" muutokset GitHubiin
  • varmista selaimella että lisätyt tiedostot menevät GitHubiin

Mene nyt tehtävässä 1 olevaan paikalliseen GitHub-repositoriosi kopioon.

  • alkuperäinen paikallinen kopio ei ole enää ajantasalla, "pullaa" sinne muutokset komennolla "git pull origin master"
    • koska alkuperäinen ei ole kloonattu repositorio, joudut kertomaan mistä pullataan (=origin) ja mitä (=master-branch)
  • varmista että molempien paikallisten repositioiden sisältö on nyt sama
  • lisää äluperäiseen kopioon joitain tiedostoja ja pushaa ne GitHubiin
  • mene jälleen kloonattuun kopioon ja pullaa
  • hae osoitteesta http://www.cs.helsinki.fi/u/mluukkai/ohtu2012 löytyvä zipattu paketti, pura se kloonattuun repositorioon
  • lisää .gitignore-tiedostoosi hakemisto OhtuVarasto/target/
    • huom: hakemistoa ei vielä ole olemassa
  • lisää ja committoi zipistä purettu hakemisto repositorioon ja pushaa se GitHubiin
  • katso vielä kerran selaimella että GitHubissa kaikki on ajan tasalla

Nyt voit poistaa toisen paikallisista kopioista

5 Maven

  • edellisessä tehtävässä lisättiin repositorioon maven-muodossa oleva projekti joka sisältää ohjelmoinnin perusteista tutun luokan Varasto, sen käyttöä demonstroivan pääohjelman ja muutaman JUnit-testin
  • tutki maven-muotoisen projektin hakemistorakennetta, esim antamalla komento tree projektin juuressa (tree ei ole maveniin liittyvä käsky vaan normaali shell-komento)
    • tarkastele projektin määrittelevän pom.xml-tiedoston sisältöä
    • HUOM: macissa ei ole oletusarvoisesti tree-komentoa, asennusohje täällä
      • vaihtoehtoisesti saat treetä vastaavan toiminnallisuuden macissa komennolla find .  ! -regex './\..'  -print | sed -e 's;[^/]*/;|__;g;s;__|; |;g'
    • myöskään kaikissa linuxeissa ei tree ole oletusarvoisesti asennettu. debian-pohjaisissa linuxeissa (esim ubuntussa) saat asennettua tree:n komennolla sudo apt-get install tree
  • avaa edellisen tehtävän projekti suosikki-idelläsi
  • Ohjelmakoodin editointi kannattaa tehdä IDE:llä, ja välillä myös ohjelman ja testien ajaminenkin. mavenia kannattaa kuitenkin ehdottomasti totutella käyttämään myös komentoriviltä. Kokeile seuraavia:
    • aloita puhtaalta pöydältä: mvn clean
      • tee juuressa komento tree
    • käännä: mvn compile
      • tee jälleen juuressa komento tree, mitä muutoksia huomaat?
    • käännöksen jälkeen voit suorittaa pääohjelman komennolla mvn exec:java -Dexec.mainClass=ohtu.ohtuvarasto.Main
      • parametrina siis main-metodin sisältävän luokan nimi
    • tee mvn clean ja yritä suorittaa ohjelma uudelleen, miten käy?
      • suorita cleanin jälkeen tree-komento, mitä clean tekee?
    • aja testit komennolla mvn test
      • suorita jälleen komento tree
      • huomaat, että testien ajaminen luo hakemiston tree/surefire-reports, testien diagnostiikka tulee hakemistoon
    • tee projektista jar-tiedosto: mvn install
    • suorita jar komennolla java -cp tiedostonNimi.jar ohtu.ohtuvarasto.Main

6 JUnit

  • kertaa JUnitin perusteet osoitteesta https://wiki.helsinki.fi/display/ohma/JUnit
  • täydennä tehtävässä 4 repositorioosi lisäämäsi projektin testejä siten että luokan Varasto rivikattavuudeksi (line coverage) tulee 100%
    • Joudut huomioimaan ainakin tapaukset, joissa varastoon yritetään laittaa liikaa tavaraa ja varastosta yritetään ottaa enemmän kuin siellä on
    • edellinenkään ei vielä riitä
  • testauskattavuuden saat selville seuraavasti:
    • käytetään mavenissa pluginina olevaa cobertura-nimistä koodikattavuustyökalua
    • suorita projektin juuresta komento mvn cobertura:cobertura
    • kattavuusraportit tulevat hakemistoon target/site/cobertura
  • kun Varaston testien koodikattavuus on 100% pushaa tekemäsi muutokset GitHubiin

7 Jenkins

Alkuvalmistelut:

luodaan ensimmäinen "build job" ja määritellään se kääntämään ja testaamaan edellisen tehtävän "OhtuVarasto"

  • valitse new job ja  free style software project
    • nimeä projekti muodossa <käyttäjätunnus>-viikko1
  • täytä lomakkeesta kohdat:
    • laita rasti kohtaan discard old build ja merkkaa avautuvaan laatikkoon esim 10
    • GitHub project
    • Source Code Management
      • valitse git
      • laita kohtaan Repository URL GitHubista projektin kohdalta löytyvä Git Read-Only 
    • Build
      • add build step -> invoke top-level maven targets
      • kohtaan goals laitetaan halutut maven-targetit, tällä kertaa clean test
      • klikkaa advanced ja määrittele kohtaan POM tiedoston pom.xml sijainti projektissasi eli OhtuVarasto/pom.xml
    • tämän jälkeen voit sanoa save
  • peruskonfiguraatio on valmis, valitse build new
  • jos kaikki on hyvin, tulee build job -kohtaan sininen pallo
    • klikkaa palloa katso mitä console output:ista löytyy
    • console output on tärkeä paikka jos kaikki ei mene odotusten mukaisesti

jatketaan kokeiluja

  • riko projektistasi joku testi, pushaa se githubiin ja tee uudelleen build new
    • huomioi miten jenkins raportoi tilanteen, katso myös console outputia rikki menneestä buildista
  • testitulosten parempi raportointi
    • valitse configure laita rasti post build actions:in alta löytyvään kohtaan Publish JUnit test result report
      • määrittele testiraporttiesi sijainti, etsi esim komennon tree avulla paikallisesta repositoriostasi missä testiraportit ovat
    • talleta ja buildaa taas
    • tarkista kohdasta latest test results miten jenkins raportoi testituloksen
  • ennen seuraavaa vaihetta, varmista että testisi menevät läpi!
    • huom: voit perua uusimman commitin (jolla äsken rikoit testi) gitillä seuraavasti git revert HEAD --no-edit
  • konfiguroit jenkins myös näyttämään testikattavuus ja projektin javadoc
    • toimi Jenkins Guiden sivujen 34-39 ohjeiden mukaan
    • huom1: pluginit ovat jenkinsissä valmiiksi asennettuna
    • huom2: build goaliksi testikattavuuden osalta pitää laittaa cobertura:cobertura -Dcobertura.report.format=xml
    • xml-test reportsien sijainniksi voi laittaa OhtuVarasto/target/site/cobertura/coverage.xml
    • kokeile myös javadoc:ien generointia paikallisella koneella antamalla komento mvn javadoc:javadoc
    • selvitä javadoc:ien polku komennolla tree
    • huom3: jos määrittelet erillisen build-stepin, muista määritellä pom.xml-tiedoston sijainti!
  • konfiguroi jenkins vielä generoimaan projektistasi jar-tiedosto
    • lisää build goal install (tämä tekee oikeastaan test-goalin tarpeettomaksi sillä install:ia ennen tehdään aina test)
    • Post build -actions kohdasta valitse Archive the artifacts
    • kohtaan files to archive tulee generoidun jar-tiedoston polku. Selvitä se tekemällä mvn install paikallisesti
  • tutki mitä kaikkea Jenkins-projektissasi nyt on
    • mikä on Workspace:n sisältö?

Automatisoidaan vielä buildaus siten, että Jenkins tekee kaikki konfiguroidut toimenpiteet automaattisesti kun GitHubissa olevaan koodiin tulee muutos

  • huonompi tapa hoitaa asia on laittaa Jenkins pollaamaan repositoioa määräajoin, kokeillaan ensin tätä
    • valitse configure ja laita rasti kohtaan poll scm
    • avautuvaan schedule-laatikkoon määritellään cron-formaatissa miten usein repositorioa pollataan
    • määrittele että pollaus tapahtuu kerran minuutissa
    • riko ohjelmasta joku testi, pushaa se githubiin ja varmista että Jenkins huomaa muutoksen
    • korjaa testi ja varmista että Jenkins reagoi taas
  • parempi tapa on määritellä GitHub kertomaan Jenkinssille aina kun projektiin tulee muutoksia, eli määritellä GitHubiin Post Update hook
    • poista rasti kohdasta poll scm
    • valitse Trigger builds remotely
    • anna kohtaan authentication token joku merkkijono
    • tämän jälkeen voit triggeröidä käänöksen urlista <jenkinsprojektisi-url>/build?token=TOKEN_NAME
    • kokeile komentoriviltä että tämä onnistuu, voit käyttää esim, curl-komentoa tyyliin: curl http://jenkins.staff.cs.helsinki.fi/job/kayttajatunnuksesi-viikko1//build?token=maarittelemasi-token
    • mene selaimella GitHub-projektiisi ja klikkaa ylhäältä admin
    • valitse service hooks ja post recieve URLs
    • lisää tähän Jenkins-projektisi buildin triggeröivä url
    • tee muutos projektiisi ja varmista että Jenkins reagoi

Käytä tässä tehtävässä laitoksen palvelimella olevaa Jenkinsiä. Omissa projekteissa kannattaa käyttää "pilvessä olevaa" Jenkinsiä http://www.cloudbees.com

  • Cludbees on erittäin professionaali palvelu joka tarjoaa myös mahdollisuuden deployata Java-pohjaisia web-sovelluksia pilveen

8 Forkaa repositorio https://github.com/mluukkai/ohtu2012

  • forkkaaminen tapahtuu seuraavasti:
    • kun olet kirjautuneena GitHubiin, mene yo. osoitteeseen
    • paina oikeassa yläkulmassa olevaa nappia "fork"
  • saat näin oman "forkatun" kopion repositoriosta ohtu2012
  • kloonaa forkattu repositorio paikalliselle koneellesi
  • lisää repositorioon hakemisto jonka nimi on muotoa SukunimiEtunimi
    • eli esim. oma hakemistoni olisi LuukkainenMatti
  • lisää hakemiston sisälle tiedosto nimeltä viikko1
  • pushaa muutokset githubiin
  • tee forkkaamastasi repositiosta "pull request"
    • mene selaimella forkkaamaasi repositorioon
    • paina oikeassa kulmassa olevaa nappia "pull request"
    • anna tehtävistä palautetta avautuvaan lomakkeeseen

9 Kirjanpito

Kirjaa tekemäsi tehtävät tänne

  • huom: tehtävien palautuksen deadline on su 18.3. klo 23.59
Labels
  • None