{"id":131735,"date":"2021-04-06T13:14:10","date_gmt":"2021-04-06T12:14:10","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=space&#038;p=131735"},"modified":"2021-04-06T13:14:10","modified_gmt":"2021-04-06T12:14:10","slug":"space-automation-da-coklu-depo-derlemeleri-icin-destek","status":"publish","type":"space","link":"https:\/\/blog.jetbrains.com\/tr\/space\/2021\/04\/06\/space-automation-da-coklu-depo-derlemeleri-icin-destek\/","title":{"rendered":"Space Automation&#8217;da \u00c7oklu Depo Derlemeleri i\u00e7in Destek"},"content":{"rendered":"<p><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/03\/title_image.png\" alt=\"Space Automation'da \u00e7oklu depo derlemeleri i\u00e7in destek\" \/><\/p>\n<\/p>\n<p>Space Automation (CI\/CD&#8217;den sorumlu <a href=\"https:\/\/www.jetbrains.com\/space\/\" target=\"_blank\" rel=\"noopener\">JetBrains Space<\/a> b\u00f6l\u00fcm\u00fc), yak\u0131n zamanda, Automation betiklerinizin \u00e7e\u015fitli Git depolar\u0131yla \u00e7al\u0131\u015fmas\u0131na izin veren birka\u00e7 harika yeni \u00f6zellik kazand\u0131.<\/p>\n<p>De\u011fi\u015fiklikleri a\u015fa\u011f\u0131da k\u0131saca sunuyoruz:<\/p>\n<ol>\n<li>\n<p>Bir i\u015f (job) art\u0131k bir projedeki her depoya g\u00f6z atabilir (sadece \u00e7al\u0131\u015fan Otomasyon beti\u011fini i\u00e7erene de\u011fil).<\/p>\n<\/li>\n<li>\n<p>Otomasyon art\u0131k belirli bir havuz, dal, dizin veya dosyadaki de\u011fi\u015fiklikler \u00fczerinde \u00e7al\u0131\u015ft\u0131r\u0131lan bir i\u015fi tetikleyebilir.<\/p>\n<\/li>\n<\/ol>\n<p><span id=\"more-124852\"><\/span><\/p>\n<p>Bu nerede yararl\u0131 olabilir? \u00d6rne\u011fin, mikro hizmetlere (her biri ayr\u0131 bir depoda) dayal\u0131 bir projeniz var ve bir b\u00fct\u00fcn olarak proje kar\u015f\u0131s\u0131nda \u00e7al\u0131\u015fan entegrasyon testleri i\u00e7eren ayr\u0131 bir deponuz var. Ba\u015fka bir ger\u00e7ek hayat \u00f6rne\u011fi: Bir proje birden fazla depo i\u00e7eriyor ve her deponun dok\u00fcmantasyon i\u00e7eren kendi <code>doc\/<\/code> klas\u00f6r\u00fc var. Automation&#8217;\u0131 kullanarak, t\u00fcm bu depolar\u0131n <code>doc\/<\/code> klas\u00f6rlerindeki de\u011fi\u015fiklikleri izleyen ve dahili bir dok\u00fcmantasyon web sitesi olu\u015fturup da\u011f\u0131tan bir i\u015f ayarlayabilirsiniz.<\/p>\n<p>Daha fazla ayr\u0131nt\u0131y\u0131 okuyun!<\/p>\n<h2>Kaynak kodunu kontrol etme<\/h2>\n<p>Normalde, Space Automation&#8217;da &quot;kaynak kodunu kontrol etme&quot; ad\u0131m\u0131n\u0131 d\u00fc\u015f\u00fcnmenize gerek yoktur. Bir i\u015f her ba\u015flat\u0131ld\u0131\u011f\u0131nda, Automation ge\u00e7erli dal\u0131 mevcut depodan (\u00e7al\u0131\u015fan beti\u011fi i\u00e7eren) klonlar.<br \/>\n\u015eimdi, bir i\u015f bir proje i\u00e7indeki ba\u015fka bir deponun i\u00e7eri\u011fini gerektiriyorsa, ana depoya ek olarak bu depoyu da kontrol edebilirsiniz. Tek yapman\u0131z gereken <code>git<\/code> blo\u011funda ikinci deponun ad\u0131n\u0131 belirtmektir:<\/p>\n<pre><code class=\"language-kotlin\">job(&quot;check out second repo&quot;) {\n    \/\/ check out second-repo to \/mnt\/space\/work\/repo-2\n    git(&quot;second-repository&quot;) {\n        \/\/ the default path is \/mnt\/space\/work\/$repoName\n        \/\/ but you can change it with cloneDir\n        cloneDir = &quot;repo-2&quot;\n    }\n\n    container(&quot;ubuntu&quot;) {\n        shellScript {\n            content = &quot;&quot;&quot;\n                echo Directory structure\n                ls -R \/mnt\n                echo Working dir is\n                pwd\n            &quot;&quot;&quot;\n        }\n    }\n}\n\/\/ the \/mnt\/space\/work dir will contain the current and the second repo\n\/\/ \/mnt\/space\/work\/main-repo ; \/mnt\/space\/work\/repo-2\n\/\/ Working dir is \/mnt\/space\/work\/main-repo<\/code><\/pre>\n<p>Hepsi bu kadar da de\u011fil! Art\u0131k, depodan hangi verileri getirmek istedi\u011finizi de se\u00e7ebilirsiniz: etiketleri, belirli dallar\u0131 veya revizyonlar\u0131 getirebilirsiniz. <a href=\"https:\/\/jetbrains.com\/help\/space\/check-out-project-sources.html#fetching-data-on-other-branches-and-revisions\" target=\"_blank\" rel=\"noopener\">Automation belgelerinde daha fazlas\u0131n\u0131 \u00f6\u011frenin<\/a><\/p>\n<h2>Bir dal, dizin veya dosyadaki de\u011fi\u015fikliklerle \u00e7al\u0131\u015ft\u0131r\u0131lan bir i\u015fi tetikleme<\/h2>\n<p>Varsay\u0131lan olarak, bir deponun belirli bir dal\u0131na bir commit i\u015flemi yap\u0131ld\u0131\u011f\u0131nda, Automation bu dalda bir betik y\u00fcr\u00fctmesini tetikler. Elbette, bu i\u015flem depodaki t\u00fcm dallarda \u00e7al\u0131\u015f\u0131r. Beti\u011fi yaln\u0131zca belirli depolarda \u00e7al\u0131\u015ft\u0131rmak i\u00e7in, <code>gitPush<\/code> blo\u011funun i\u00e7indeki <code>branchFilter<\/code> parametresini kullan\u0131n.<\/p>\n<p>\u00d6rne\u011fin, sadece <code>my-feature<\/code> dal\u0131nda i\u015fler tetiklemek i\u00e7in:<\/p>\n<pre><code class=\"language-kotlin\">job(&quot;Run on git push&quot;) {\n    startOn {\n        gitPush {\n            branchFilter {\n                +&quot;refs\/heads\/my-feature&quot;\n            }\n        }\n    }\n}<\/code><\/pre>\n<p><code>branchFilter<\/code>&#8216;\u0131n <a href=\"https:\/\/jetbrains.com\/help\/space\/run-a-job-on-event-trigger.html#branchFilter\" target=\"_blank\" rel=\"noopener\">Regex, dahil etme ve d\u0131\u015f\u0131nda b\u0131rakma kurallar\u0131 ve joker karakter (wildcard)<\/a> destekledi\u011fini unutmay\u0131n.<\/p>\n<p>Dizinlerde ve dosyalarda de\u011fi\u015fikliklerle \u00e7al\u0131\u015fan bir i\u015fi tetiklemek i\u00e7in,<code>pathFilter<\/code> blo\u011funu kullan\u0131n (<code>bran\u0441hFilter<\/code>, ile birlikte; <a href=\"https:\/\/jetbrains.com\/help\/space\/run-a-job-on-event-trigger.html#filter-by-path\" target=\"_blank\" rel=\"noopener\">karma\u015f\u0131k filtreler yaratmay\u0131<\/a> destekler):<\/p>\n<pre><code class=\"language-kotlin\">job(&quot;Run on git push&quot;) {\n    startOn {\n        gitPush {\n            pathFilter {\n                \/\/ include all from &#039;targets&#039; directory\n                +&quot;targets\/**&quot;\n                \/\/ exclude &#039;targets\/main&#039; directory\n                -&quot;targets\/main\/**&quot;\n                \/\/ include all &#039;Main.kt&#039; files in the project\n                \/\/ As this rule is more specific,\n                \/\/ &#039;Main.kt&#039; will be included even if\n                \/\/ it&#039;s located in &#039;targets\/main&#039;\n                +&quot;**\/Main.kt&quot;\n            }\n        }\n    }\n}<\/code><\/pre>\n<h2>Ba\u015fka bir depodaki de\u011fi\u015fikliklerle \u00e7al\u0131\u015ft\u0131r\u0131lan bir i\u015fi tetikleme<\/h2>\n<p>Bazen, birka\u00e7 proje deposundan kaynak kodu kullanan bir derleme yap\u0131land\u0131rman\u0131z gerekebilir. \u00d6rne\u011fin, di\u011fer depolarda hi\u00e7bir <code>.space.kts<\/code> dosyas\u0131 bulunmazken, t\u00fcm proje i\u00e7in derleme beti\u011fini i\u00e7eren ayr\u0131 bir depo olu\u015fturabilirsiniz.<\/p>\n<p>M\u00fcmk\u00fcn olan en basit \u00f6rne\u011fe bir g\u00f6z atal\u0131m. Diyelim ki iki depolu bir projeniz var: <code>first-repository<\/code> ve <code>second-repository<\/code>. \u015eu <code>.space.kts<\/code> dosyas\u0131n\u0131 <code>first-repository<\/code>&#8216;ye eklersiniz:<\/p>\n<pre><code class=\"language-kotlin\">job(&quot;Run on change in second-repository&quot;) {\n    startOn {\n       gitPush {\n            repository = &quot;second-repository&quot;\n        }\n    }\n\n    \/\/ don&#039;t forget to check out \n    \/\/ the content of second-repo\n    git(&quot;second-repository&quot;)\n\n    container(&quot;alpine&quot;) {\n        shellScript {\n            content = &quot;ls \/mnt\/space\/work&quot;\n        }\n    }\n}<\/code><\/pre>\n<p>Aray\u00fczde nas\u0131l g\u00f6r\u00fcn\u00fcyor? E\u011fer <code>first-repository<\/code> i\u00e7in <strong>\u0130\u015fler (Jobs)<\/strong> sayfas\u0131n\u0131 a\u00e7arsan\u0131z, yeni bir \u015fey g\u00f6rmezsiniz, sadece normal bir i\u015f \u00e7al\u0131\u015fmas\u0131:<\/p>\n<p><a href=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/03\/gitPush-multiRepo-UI-firstRepo.png\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/03\/gitPush-multiRepo-UI-firstRepo.png\" alt=\"Space Automation. gitPush tetikleyicide \u00e7oklu depo deste\u011fi\" \/><\/a><\/p>\n<p>Ancak \u015fimdi e\u011fer sayfay\u0131 <code>second-repository<\/code> i\u00e7in i\u015f listesine de\u011fi\u015ftirirseniz, \u015fu anda se\u00e7ili olan depoya referanslar\u0131 bulunan di\u011fer depolardan i\u015flerin oldu\u011fu <strong>\u00e7apraz referansl\u0131 i\u015fleri<\/strong> i\u00e7erdi\u011fini g\u00f6receksiniz. Bizim durumumuzda, tek i\u015f, <code>first-repository<\/code>&#8216;den gelen i\u015fimizdir:<\/p>\n<p><a href=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/03\/gitPush-multiRepo-UI-crossRefJobs_2.png\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/03\/gitPush-multiRepo-UI-crossRefJobs_2.png\" alt=\"Space Automation. gitPush tetikleyicide \u00e7oklu depo deste\u011fi\" \/><\/a><\/p>\n<p>Elbette, daha derine inebilir ve depo tetikleyicisine bir seviye daha ekleyebilirsiniz: bir dala veya veri yoluna g\u00f6re filtreleme. <a href=\"https:\/\/jetbrains.com\/help\/space\/run-a-job-on-event-trigger.html#triggering-a-job-run-on-changes-in-certain-project-repositories\" target=\"_blank\" rel=\"noopener\">Automation belgelerinde<\/a>. daha fazlas\u0131n\u0131 bulabilirsiniz.<\/p>\n<p>B\u00f6ylece k\u00fc\u00e7\u00fck duyurumuzun sonuna geldik. Yorumlar\u0131n\u0131z\u0131 a\u015fa\u011f\u0131ya b\u0131rakman\u0131z\u0131 ve bu yeni \u00f6zellikleri denemenizi rica ederiz!<\/p>\n","protected":false},"author":902,"featured_media":0,"comment_status":"closed","ping_status":"closed","template":"","categories":[],"tags":[],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/tr\/wp-json\/wp\/v2\/space\/131735"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/tr\/wp-json\/wp\/v2\/space"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/tr\/wp-json\/wp\/v2\/types\/space"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/tr\/wp-json\/wp\/v2\/users\/902"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/tr\/wp-json\/wp\/v2\/comments?post=131735"}],"version-history":[{"count":1,"href":"https:\/\/blog.jetbrains.com\/tr\/wp-json\/wp\/v2\/space\/131735\/revisions"}],"predecessor-version":[{"id":131736,"href":"https:\/\/blog.jetbrains.com\/tr\/wp-json\/wp\/v2\/space\/131735\/revisions\/131736"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/tr\/wp-json\/wp\/v2\/media?parent=131735"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/tr\/wp-json\/wp\/v2\/categories?post=131735"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/tr\/wp-json\/wp\/v2\/tags?post=131735"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/tr\/wp-json\/wp\/v2\/cross-post-tag?post=131735"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}