Vinnaren i pepparkakshustävlingen!
2016-12-08, 23:31
  #1
Medlem
bithaxs avatar
Hur brukar man lösa deploy mellan dev, test och prod miljö i seriösa utvecklingssammanhang?
Jag söker förslag på verktyg bland annat.

Min första tanke var att ha en git som man kan pusha eller pulla ned till. Problemet är att då kan man inte ha confar i gitten eftersom confarna är olika för dev, test och prod, och man vill inte blanda ihop dem. Framför allt vill man inte att lösenord skall spridas eller att en path från testmiljön av misstag åker ut i produktionen.

Själv tänker jag mig ett deploysystem där man t.ex. kan ha en agent som sitter på servern och tar emot mail med tar.gz filer som den packar upp och kör ett script som ligger i. Men det känns som att detta redan finns.

Tror ni Ansible skulle kunna lösa mitt problem, eller borde jag kolla på Docker? Några andra förslag?

Det sista jag vill göra är att sitta och manuellt edita confar, eller skriva instruktioner till nån supportsnubbe hur han skall deploya min applikation. Det måste finnas bättre sätt!
__________________
Senast redigerad av bithax 2016-12-08 kl. 23:56.
Citera
2016-12-09, 00:33
  #2
Medlem
bithaxs avatar
Jag tror faktiskt jag har kommit på en ganska bra ide. Nämligen, använda RPM.
Det går ju att sätta upp en egen repo, men det är lite meck med det.
Citera
2016-12-09, 07:55
  #3
Medlem
valter-eggons avatar
Vi använder Jenkins där jag jobbar nu. Den checkar ut koden, bygger den och zippar ihop den och laddar upp den på målmiljön. Sen kör Jenkins batch-kommandon via ssh på målmiljön där man packar upp zip-filen och kör "ant install"

Men vi bygger även rpm:er som laddas upp i Nexus som vi använder i miljöer som kräver bättre kontroll på vilka paket som är installerade.
Citera
2016-12-09, 11:59
  #4
Medlem
Vi kör med Jenkins, Maven och lite shellscript. Vid varje commit till git så bygger och installerar Jenkins artefakterna (rpm:er) i lokalt maven-repo. Sen kommer Jenkins igen och hämtar artefakterna och installerar i vår testmiljö där automatiska GUI-tester kör.
När vi ska släppa en ny verson så gör vi release med Jenkins som kör mvn release som skickar upp allt som rpm:er till företagets Nexus.
Sen kan testavdelningen plocka de releaser de tycker fungerar bra och släppa till kund.

I mina privata Android-projekt så har jag faktiskt kvar gamla Ant-script för att bygga mina apk:er. Har inte gått över till Gradle ännu eftersom det fortfarande funkar med Ant.
Jag använder Jenkins, GitHub och Ant. Vid varje commit till GitHub så kommer Jenkins och bygger mina apk:er och kopierar dem till en disk där jag kan plocka dem för test. Där har jag ännu inga automatiska GUI-tester ännu. När jag vill deploya till Play Store så har jag ett Jenkinsjobb som fixar det också. Det finns ett par förträffliga plugins som sköter det.
Citera
2016-12-10, 09:10
  #5
Moderator
Protons avatar
Atlassian Bamboo sköter om bygget och deployerna.

Förutom CI-bygget som checkar ut koden, bygger den och kör enhetstester och deployar till en testserver så går det ju även at sätta upp den så att den sköter om deploy till prod med.

Nu kör jag visserligen visual studio, men där går det ju att ställa in bygget på vilket bygge som ska göras (Debug, Release etc) och det går att ha olika configfiler för var och ett av byggena. I maven tror jag man löser sådant med byggprofiler så att rätt configfiler fäljer med det färdiga bygget.

Det går ju även att få ant (eller nant beroende på miljö) att köra en transformation på konfigurationsfilerna för att byta ut miljöspecifika delar i dessa till den man vill ha.

Oavsett vilket sköts allt med byggservern.
Citera
2016-12-13, 12:29
  #6
Medlem
Miniwas avatar
Ni som kör Jenkins, hur brukar ni strukturera själva byggena?
Har ni ett bygg-projekt för varje operativsystem, ett för 32bit repektive 64bit, ett för release till testserver, ett för skarp release till repository osv eller kör ni allt i ett?

Försökte nämeligen att bygga ett C++ projekt i "matrix" läge med OS och arkitektur som konfigureringar men blev förbaskat krångligt i slutändan.
Citera
2016-12-13, 13:19
  #7
Medlem
Sane?s avatar
Jag kan rekommendera Octopus Deploy eller Visual Studio Team Services. Jenkins känns väldigt gammalmodigt och trögjobbat jämfört med dessa.
Citera
2016-12-13, 19:59
  #8
Medlem
bithaxs avatar
Citat:
Ursprungligen postat av Sane?
Jag kan rekommendera Octopus Deploy eller Visual Studio Team Services. Jenkins känns väldigt gammalmodigt och trögjobbat jämfört med dessa.

Det som är bra med Jenkins är väl att det är ganska generellt? Det jag skall deploya är egentligen mest databasscript och xml filer, och det hela körs på linux. Ibland behöver man lägga till saker i cron, typ så.

Jag har aldrig kört ant eller gradle, äremot maven, men maven är ganska specifikt för java.
Nu är dethär inte java, jag har rent ärligt funderat på att bygga make script bara för att packetera och fixa saker. Gradle är väl ett lite bättre alternativ än gamla sura make filer dock.
__________________
Senast redigerad av bithax 2016-12-13 kl. 20:03.
Citera
2017-01-02, 09:35
  #9
Medlem
EnDodTigers avatar
Det är stor skillnad på behov beroende på vilken typ av mjukvara man utvecklar. Ni som tycker att Jenkins är "gammalmodigt" har nog bara erfarenhet av Windows-/PC-/Apple-baserad utveckling.

Däremot om man arbetar med mer komplexa inbyggda system så är Jenkins oslagbart. Jenkins är en förutsättning för en komplett CI-miljö när det gäller embedded.
Citera
2017-01-03, 14:57
  #10
Medlem
Nya Visual Studio Online stödjer CI dock är allting nytt så barn problem finns fortfarande.

Annars finns Continuous Deployment inbyggt i Microsoft Azure systemet.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback