{"id":229628,"date":"2022-11-06T18:34:00","date_gmt":"2022-11-06T15:34:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229628"},"modified":"2022-11-09T11:31:57","modified_gmt":"2022-11-09T08:31:57","slug":"projektin-suojakaiteet-ympaeristoejen-tarjoaminen","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/projektin-suojakaiteet-ympaeristoejen-tarjoaminen\/","title":{"rendered":"Projektin suojakaiteet: Ymp\u00e4rist\u00f6jen tarjoaminen"},"content":{"rendered":"\n<p>T\u00e4m\u00e4 lyhyiden artikkelien sarja koostuu muutamista asioista, jotka olen oppinut muutaman viime vuoden aikana ajaessani projekteja alueella, jolla me (olettaen, ett\u00e4 luet t\u00e4t\u00e4 samalta alalta kuin min\u00e4 \ud83d\ude42) ty\u00f6.<\/p>\n<p>Jos olet vain t\u00f6rm\u00e4nnyt t\u00e4h\u00e4n, sarja kattaa joitain <a href=\"https:\/\/tommcfarlin.com\/tag\/open-source-project-management\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">projektin kannalta t\u00e4rkeit\u00e4<\/a> tekij\u00f6it\u00e4 :<\/p>\n<ol>\n<li>Ei pit\u00e4isi olla &quot; <a href=\"https:\/\/wordpress.mediadoma.com\/fi\/projektin-suojakaiteet-suunnittelu-toimikunnan-toimesta\/\" title=\"komitean suunnittelemaa\">komitean suunnittelemaa&#8221;.<\/a> &quot;<\/li>\n<li>Kukaan muu, jonka ydinkehitystiimin pit\u00e4isi pysty\u00e4 tarjoamaan kehityst\u00e4, lavastusta ja tuotantoa.<\/li>\n<li>Kukaan muu kuin kehitystiimi ei saisi kirjoittaa tuotantoon (ja silloinkin pit\u00e4isi olla k\u00e4ytt\u00f6\u00f6nottoprosessi).<\/li>\n<\/ol>\n<p>En todellakaan pid\u00e4 t\u00e4llaisista tiukoista ja nopeista s\u00e4\u00e4nn\u00f6ist\u00e4, nimitt\u00e4in koska asiat muuttuvat ajan my\u00f6t\u00e4 joko tarpeen tai kokemuksen my\u00f6t\u00e4. T\u00e4st\u00e4 syyst\u00e4 pid\u00e4n &quot;ohjeista&quot;.<\/p>\n<p>Mutta t\u00e4t\u00e4 kirjoittaessani n\u00e4m\u00e4 ovat asioita, joita n\u00e4en toimivan.<\/p>\n<h2>Ymp\u00e4rist\u00f6jen tarjoaminen<\/h2>\n<p>Muutaman viime vuoden aikana olemme edistyneet paljon siin\u00e4, kuinka nopeasti voimme varustaa j\u00e4rjestelm\u00e4mme niin, ett\u00e4 ne kaikki heijastavat toisiaan (tai yleens\u00e4 niin). T\u00e4m\u00e4 sis\u00e4lt\u00e4\u00e4 kehityslaatikomme, kuinka paikalliset koneemme peilaavat lavastusta ja miten lavastus peilaa tuotantoa.<\/p>\n<p>Uuden ymp\u00e4rist\u00f6n tarjoaminen, enemm\u00e4n tai v\u00e4hemm\u00e4n. Anna menn\u00e4.<\/p>\n<p>Eli jos sen &quot;toimii koneellani&quot; pit\u00e4isi todella olla totta. Ei tekosyy sille, ettet pysty toistamaan bugia.<\/p>\n<p>Ja kun se on totta, se on todenn\u00e4k\u00f6isesti totta muiden koneissa, n\u00e4ytt\u00e4m\u00f6iss\u00e4 ja tuotannossa. Ja t\u00e4m\u00e4 on mukavaa, eik\u00f6? Tarkoitan, me py\u00f6rit\u00e4mme laatikoita, otamme k\u00e4ytt\u00f6\u00f6n skriptej\u00e4 tai teemme mit\u00e4 teemme, ja sitten meill\u00e4 on tarvitsemamme asetukset.<\/p>\n<p>Mit\u00e4 ymp\u00e4rist\u00f6jen valmistelussa sitten on? Se riippuu siit\u00e4, mihin ymp\u00e4rist\u00f6\u00f6n viittaat.<\/p>\n<h3>Milt\u00e4 t\u00e4m\u00e4 todella n\u00e4ytt\u00e4\u00e4?<\/h3>\n<p>Jos ty\u00f6skentelet WordPressiss\u00e4, mit\u00e4 oletan, jos luet t\u00e4t\u00e4, se olettaa, ett\u00e4 k\u00e4yt\u00e4t v\u00e4hint\u00e4\u00e4n verkkopalvelinta, tietokantaa ja PHP:t\u00e4.<\/p>\n<p>Kehitysymp\u00e4rist\u00f6 voi n\u00e4ytt\u00e4\u00e4 t\u00e4lt\u00e4:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.apache.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external\"><\/a><a href=\"https:\/\/www.nginx.com\/resources\/wiki\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Nginxin<\/a> <a href=\"https:\/\/www.apache.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">apache<\/a>, _<\/li>\n<li>MySQL, joka on yleisin,<\/li>\n<li>v\u00e4hint\u00e4\u00e4n PHP 5.2.4 (suositus PHP 7.1),<\/li>\n<li>Tai jotain vastaavaa.<\/li>\n<\/ul>\n<p>Saatat my\u00f6s k\u00e4ytt\u00e4\u00e4 jotain, kuten <a href=\"https:\/\/tommcfarlin.com\/laravel-valet-for-wordpress\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Laravel Valet<\/a> tai jotain, kuten <a href=\"https:\/\/github.com\/Varying-Vagrant-Vagrants\/VVV\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">VVV<\/a>. Kaikki riippuu ty\u00f6si luonteesta.<\/p>\n<p>Lis\u00e4ksi yrityksesi luonteesta riippuen sinulla voi olla IDE, joka on m\u00e4\u00e4ritetty sinulle yhdess\u00e4 erilaisten m\u00e4\u00e4ritystiedostojen kanssa <a href=\"https:\/\/tommcfarlin.com\/following-the-wordpress-coding-standards\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">tiettyjen s\u00e4\u00e4nt\u00f6jen noudattamiseksi<\/a>.<\/p>\n<h3>Ja muut ymp\u00e4rist\u00f6t?<\/h3>\n<p>Kuten tavallista:<\/p>\n<ul>\n<li>kehitys tarkoittaa paikallisen koneen asennusta,<\/li>\n<li>lavastus viittaa alueeseen, jolla sin\u00e4 ja sidosryhm\u00e4t voit testata,<\/li>\n<li>ja tuotanto on siell\u00e4, miss\u00e4 sovellus sijaitsee.<\/li>\n<\/ul>\n<p>Mutta t\u00e4m\u00e4 n\u00e4ytt\u00e4\u00e4 my\u00f6s erilaiselta riippuen siit\u00e4, miss\u00e4 ty\u00f6skentelet, miten ty\u00f6si on j\u00e4rjestetty ja niin edelleen. Kyse ei ole niink\u00e4\u00e4n siit\u00e4, miten sit\u00e4 k\u00e4ytet\u00e4\u00e4n, vaan siit\u00e4, ett\u00e4 sit\u00e4 k\u00e4ytet\u00e4\u00e4n.<\/p>\n<h4>Lavastus<\/h4>\n<p>T\u00e4m\u00e4 on yleens\u00e4 varattu palvelimelle (tai palvelinryhm\u00e4lle projektin koosta riippuen), johon voit asentaa uusimman koodisi testausta varten. Se voi sis\u00e4lt\u00e4\u00e4 osittaisia \u200b\u200btoimintoja, testitietoja ja vain osan tuotannosta per\u00e4isin olevia tietoja (jos p\u00e4\u00e4t\u00e4t noutaa kyseiset tiedot, nimitt\u00e4in tietokannan, tuotantoymp\u00e4rist\u00f6st\u00e4).<\/p>\n<p>T\u00e4m\u00e4 antaa sinulle ja muille sidosryhmille mahdollisuuden tarkastella, mit\u00e4 tapahtuu ja miten se toimii tuotannossa ilman, ett\u00e4 sinun tarvitsee huolehtia arkaluontoisten asioiden tuhoamisesta.<\/p>\n<p>Koodi otetaan yleens\u00e4 k\u00e4ytt\u00f6\u00f6n haarasta, yleens\u00e4 p\u00e4\u00e4versiosta, Git-arkistostasi (jos k\u00e4yt\u00e4t sit\u00e4). Ja ty\u00f6kaluja, kuten <a href=\"https:\/\/deploybot.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">DeployBot<\/a>, <a href=\"https:\/\/circleci.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">CircleCI<\/a>, <a href=\"https:\/\/travis-ci.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Travis CI<\/a>, <a href=\"https:\/\/github.com\/phpro\/grumphp\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">GrumPHP<\/a>, <a href=\"http:\/\/behat.org\/en\/latest\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Behat<\/a> jne., k\u00e4ytet\u00e4\u00e4n my\u00f6s koodin laadun arvioimiseen, automaattisen testauksen suorittamiseen ja lopulta koodin k\u00e4ytt\u00f6\u00f6nottoon.<\/p>\n<p>Lopulta jokainen ymp\u00e4rist\u00f6 varustetaan siten, ett\u00e4 ne voidaan nopeasti peilata paikallisten koneiden, v\u00e4lityspalvelimien ja tuotantopalvelimien v\u00e4lill\u00e4. Lis\u00e4ksi datan ty\u00f6nt\u00e4minen ja vet\u00e4minen niiden v\u00e4lill\u00e4 pit\u00e4isi olla helppoa, jotta tietojen kanssa ty\u00f6skentely olisi helppoa.<\/p>\n<h4>Tuotanto<\/h4>\n<p>Lopuksi tuotannossa on kyse varsinaisesta toimivasta projektista; T\u00e4m\u00e4 tarkoittaa, ett\u00e4 palvelin, sovellus ja tietokanta toimivat yhdess\u00e4 ja k\u00e4ytt\u00e4j\u00e4t k\u00e4ytt\u00e4v\u00e4t sit\u00e4.<\/p>\n<p>T\u00e4m\u00e4 tarkoittaa my\u00f6s sit\u00e4, ett\u00e4 koodi on vakaalla paikalla. K\u00e4yt\u00f6ss\u00e4 on todenn\u00e4k\u00f6isesti kirjausmekanismeja, jotka ilmoittavat kehitystiimille kaikista ongelmista. Koodia ei saa muuttaa t\u00e4ss\u00e4 ymp\u00e4rist\u00f6ss\u00e4 ilman, ett\u00e4 se on l\u00e4p\u00e4issyt laadunvarmistuksen tai vaiheistuksen ensin.<\/p>\n<h3>Ja prosessit paikallaan?<\/h3>\n<p>Okei, oletetaan, ett\u00e4 ty\u00f6skentelet paremman termin puutteessa perinteisell\u00e4 asennuksella, jossa kaikki k\u00e4ytt\u00f6\u00f6nottosi tehd\u00e4\u00e4n S\/FTP:n kautta tuotantoymp\u00e4rist\u00f6\u00f6n (tai jopa lavastusymp\u00e4rist\u00f6\u00f6n). T\u00e4ll\u00e4 tavalla k\u00e4ytt\u00e4j\u00e4t voivat vet\u00e4\u00e4 tiedostoja alas, tehd\u00e4 muutoksia ja nostaa ne takaisin yl\u00f6s.<\/p>\n<p>Tuo ei ole hyv\u00e4.<\/p>\n<p>T\u00e4m\u00e4 tarkoittaa, ett\u00e4 kuka tahansa, jolla on valtuustiedot, voi kirjautua sis\u00e4\u00e4n, tehd\u00e4 muutoksia ja ohittaa l\u00e4hteen hallinnan, jatkuvan integroinnin, laadunvarmistusty\u00f6kalut ja niin edelleen, tehd\u00e4 mit\u00e4 tahansa muutoksia.<\/p>\n<p>Se heikent\u00e4\u00e4 kaikkia k\u00e4ytt\u00f6\u00f6notettuja prosesseja. T\u00e4m\u00e4 ei vain ohita vakiomenettely\u00e4 (joka on tietysti syyst\u00e4), vaan se p\u00e4\u00e4tyy rikkomaan koodin, joka kehitt\u00e4j\u00e4ll\u00e4 tai kehitt\u00e4j\u00e4ryhm\u00e4ll\u00e4 on koneissaan ensisijaisesti siksi, ett\u00e4 tuotannossa oleva sis\u00e4lt\u00f6 ei ole en\u00e4\u00e4 synkronoitu koodin arkisto.<\/p>\n<p>Lis\u00e4ksi t\u00e4m\u00e4 koodi voidaan levitt\u00e4\u00e4 haarakonttoreille, joita ei viel\u00e4 yhdistet\u00e4 tai otetaan k\u00e4ytt\u00f6\u00f6n. T\u00e4m\u00e4 j\u00e4tt\u00e4\u00e4 meille erilaisia \u200b\u200btilanteita, joissa kehitt\u00e4j\u00e4t ja asiakkaat ovat rikkoneet jonkin osan rakennusprosessista ja siten koko projektista.<\/p>\n<p>Kun on aika tarkistaa tuotantoa, se ei ole synkronoitu kehityksen ja lavastuksen kanssa, eik\u00e4 kukaan tied\u00e4 miksi. Kun on aika ottaa k\u00e4ytt\u00f6\u00f6n, muutokset kirjoitetaan p\u00e4\u00e4lle, ja vastuulliset ovat menett\u00e4neet sen, mit\u00e4 he luulivat n\u00e4kev\u00e4ns\u00e4.<\/p>\n<h3>Mit\u00e4 tiimill\u00e4 on teht\u00e4v\u00e4?<\/h3>\n<p>En tied\u00e4 onko t\u00e4h\u00e4n olemassa yht\u00e4 oikeaa vastausta, mutta mit\u00e4 pidemp\u00e4\u00e4n ty\u00f6skentelen t\u00e4ll\u00e4 alalla, sit\u00e4 enemm\u00e4n uskon, ett\u00e4 ratkaisun rakentamisesta asiakkaalle vastaavalla yrityksell\u00e4 \u2013 tai yrityksill\u00e4 \u2013 pit\u00e4isi hallita prosessia alusta alkaen. Loppuun.<\/p>\n<ul>\n<li>Suunnittelijat ovat vastuussa omien osa-alueidensa hallinnasta, luovat konsepteja, pilkkaa, luovat esittelymalleja ja pyyt\u00e4v\u00e4t palautetta,<\/li>\n<li>Projektip\u00e4\u00e4llik\u00f6t vastaavat yhteydenpidosta osastojen kanssa,<\/li>\n<li>Kehitt\u00e4j\u00e4t vastaavat ratkaisun toteuttamisesta ja suunnittelijoiden ty\u00f6n yhdist\u00e4misest\u00e4 toimivaan taustaan,<\/li>\n<li>Asiakas on vastuussa muutosten tarkistamisesta, palautteen antamisesta ja muiden teht\u00e4v\u00e4n suorittamiseen tarvittavien tietojen toimittamisesta.<\/li>\n<\/ul>\n<p>T\u00e4m\u00e4 tarkoittaa, ett\u00e4 verkkotunnuksen, is\u00e4nn\u00f6innin, ymp\u00e4rist\u00f6jen, versionhallinnan, rakennusprosessin ja jatkuvan integroinnin sek\u00e4 kaiken muun, mit\u00e4 olen unohtanut mainita, m\u00e4\u00e4ritt\u00e4minen kuuluu suoraan kehitystiimille.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-166423-61e793a807c63.jpg\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-166423-61e793a807c63.jpg\" alt=\"Projektin suojakaiteet: Ymp\u00e4rist\u00f6jen tarjoaminen\" ><\/a><\/p>\n<p>Pysy juoksuhaudoissa, pysy tavoitteessa (mutta muista ymp\u00e4rill\u00e4si olevat).<\/p>\n<p>Yksinkertaisesti sanottuna n\u00e4m\u00e4 eiv\u00e4t ole asiakkaan velvollisuuksia, eik\u00e4 niiden pit\u00e4isi olla. Vastuurajat tulee asettaa, yll\u00e4pit\u00e4\u00e4 ja kunnioittaa kaikissa tiimeiss\u00e4 \u2013 ei vain kehitt\u00e4jien ja asiakkaiden tai asiakkaiden ja suunnittelijoiden tai suunnittelijoiden ja kehitt\u00e4jien ja niin edelleen.<\/p>\n<h2>Mit\u00e4 seuraavaksi?<\/h2>\n<p>Seuraavassa viestiss\u00e4 puhun vastuista, jotka kehitt\u00e4jill\u00e4 (ja muilla sidosryhmill\u00e4) on koodin ymp\u00e4rist\u00f6jen yll\u00e4pidossa.<\/p>\n<p>Eli kenen pit\u00e4isi olla vastuussa mist\u00e4kin ja kenell\u00e4 on oikeus lukea ja kirjoittaa mit\u00e4 tietoja ja miten se voi lopulta vaikuttaa projektin tulokseen.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mit\u00e4 ymp\u00e4rist\u00f6jen provisiointi tarkoittaa? Se riippuu todella siit\u00e4, mist\u00e4 ymp\u00e4rist\u00f6st\u00e4 puhut, joten katsotaanpa kutakin.<\/p>\n","protected":false},"author":1,"featured_media":166424,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[750,719],"tags":[1166],"class_list":["post-229628","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-avoin-laehdekoodi","category-kehittaejae","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/229628","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/comments?post=229628"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/229628\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/166424"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=229628"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=229628"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=229628"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}