Azure Devops & Self Hosted Mac Agent Kurulum
Bu yazıda var olan mac cihazınız üzerine agent kurulumunu ve bunun Azure Devops ile eşleştirmesini anlatacağız. Yazının sonunda da hediye olarak bizim projemizdeki performans çıktısını ve etkisini de sizinle paylaşacağız :)
Aslında bu anlatacağımız birkaç yazı postunda devam edecek olan iOS CI/CD süreçlerinin devamı için bir başlangıç. Bizi takip edin :)
Ön gereksinimler;
1.https://dev.azure.com bkz. Resim-1
NOT: https://dev.azure.com/{your_organization} hesabınız bu şekilde konumlanır.
2. Mac OS X işletim sahipli bir mac cihazı
Azure Personal Access Token Oluşturmak
İlk önce bir personal access token’a ihtiyacımız olacak. Bunun için aşağıdaki Resim-2 ve Resim-3'de nasıl yapabileceğinizi adım adım özetledik.
Pool Kurmak
Ön gereksinim;
Bu adımda kullanıcınızın bir Azure DevOps kuruluş sahibi veya TFS veya Azure DevOps Server yöneticisi olması gereklidir.
Aşağıdaki adımları takip ederek önce bir agent pool oluşturabilirsiniz. Resim-7 deki konfigürasyonu da tamamladık mı bir oh çekebiliriz :)
Agent Kurmak
Yukarıda pool kurulumumuzu tamamlamıştık. Şimdi sıra geldi agent’ı kurmaya.
Şimdi mac os işletim sistemine sahip bilgisayarımızda terminali açalım.
Ardından aşağıdaki adımlar için ilk önce dosyayı indirelim (~Downloads klasörünüzde olacak). Ardından açtığımız terminal’e aşağıdaki “Create the agent” kısmındaki adımları uygulayalım.
~/$ mkdir myagent && cd myagent
~/myagent$ tar zxvf /Users/username/Downloads/vsts-agent-osx-x64-2.217.2.tar
Uyguladıktan sonra aşağıdaki gibi userınız altında bir myagent klasörü oluştu.
İpucu: Bu adımda tar zxvf yazıp download klasörünüzdeki file’ı direk terminal’e sürükle bırak yapabilirsiniz.
Gelelim şimdi Resim-8'deki “Configure the Agent” kısmına bu adımda da aşağıdaki gibi terminale kodumuzu yazdık. bkz Resim-12
./config.sh
Tabi bu adımda mac’te bir izne takılacaksınız :) Bu adımda bunu daha önceden tecrübe edenler bilir ki bunun için yapılması gereken bir takım iş vardır :)
İpucu : Bunun için çeşitli yöntemler var. Aşağıdaki linkten How to ‘Allow Apps from Anywhere’ adımına bakabilirsiniz. Ya da bizim yöntemimizi izleyebilirsiniz. Fakat basit yöntem (aşağıdaki link) her mac os sürümü için çalışmıyor.
Link: https://www.macworld.com/article/672947/how-to-open-a-mac-app-from-an-unidentified-developer.html
Biz şahsen cancel edip Allow Anyway demeye devam ediyoruz sürekli bitene kadar devam. Bittikten sonra tekrar komutu çalıştırıyoruz. Zihnim yanılmıyor ise bu adımı bir 20–25 kere devam ettiriyorduk. Bkz. Resim-14 ve Resim-15
Bunu çözmek için cancel deyip aşağıdaki gibi adımları izlemelisiniz. Tabi bu adımı baya bir tekrar etmeniz gerekecek ve her seferde de izin verdikten sonra terminalde aynı komutu yazıp denemeniz lazım (./config.sh)
Apple Sembolü -> System Preferences -> System&Security -> Allow Anyway
Buraya kadar geldiysek devamı gelir :)
Agent kurulumu için şimdi son adıma geldik. bkz Resim-17
- Bu adımda dev.azure.com organizasyon ismi ile birlikte server url yazdık. Örnek: https://dev.azure.com/{your_organization}
2. Enter girdik.
3. Kaydettiğimiz Perssonal Access Token’ı yazdık.
4. Agent pool ismini girdik. (Daha önce oluşturduğumuz)
5. Ardından agent name istedi. Default ismi kullandım enter yaparak.
6. Enter work folder’a da benzer şekilde default seçtim.
Veeeee hoş geldin Agent :)
Peki neden pasif :) Tabi ki agent’ı çalıştırmamız lazım. Bunun için aşağıdaki gibi ./run.sh komutu yazılır.
Artık agent’ımız isteyeceğiniz herhangi bir pipeline’ı (jobs) çalıştırmak için hazır bekliyor :)
Evet bir hediyemiz vardı oraya gelelim. Performans ve doğruluğun çıktısı…
Ford Otosan özelinde belli bir süre Azure’un kendi sanal mac agent’ını kullandık. Şimdi burada temel bir sorun var Xcode sürümü.
Önce gelelim doğruluk kısmına;
Biz projemizde hep Xcode’un en son çıkan sürümünü kullanıyoruz. Bunun sebebi iOS’in ve Swift’in yeni çıkan sürümlerinde çalışmak üzere. Xcode’un yeni sürümü için de genellikle mac os yeni sürümünü kurmanız gerekiyor. Fakat Azure tarafının geçişi aşağıdaki gibi biraz zaman alıyor. Bkz. Resim-21. Tabi bir de bunun pipeline ayarı var o da vmImage kısmı Resim-22'deki gibi. (Daha sonra detaylı olarak pipeline konusunda anlatacağım. https://medium.com/@adinler/azure-devops-ios-pipeline-3be1de48d7fd)
Dolayısıyla bizim lokalimiz ile (Xcode 14) vs Azure üzerinde aldığımız sürüm (Xcode 13) çıktımız farklı Xcode sürümlerinde derleniyordu. Dolayısıyla bu da bizi yanlışa sürüklüyordu. Çünkü en basitinden Xcode sürümlerine göre kullanabileceğiniz Swift kütüphaneleri bile fark ediyor. Örnek olarak lokalinizde Swift 5.7 sürümü ile çalışırken Azure üzerinde Swift 5.6 sürümü ile build almak zorunda kalıyorsunuz. Bu da ciddi bir problem. Bunu çözmek için agent biçilmez kaftan.
Şimdi gelelim build hızı konusuna;
Diğer bir konu da daha hızlı build süreleri. Bundan bir örnek verecek olursam aynı iOS job’ının benzer kod geliştirimleri için derlenme süreleri arasındaki ciddi fark. Tabi büyük bir oran farkı mac’in işlemcisine, donanımına bağlı olarak değişebilir. Fakat sanal makineden daha hızlı olacağını söyleyebilirim bu noktada.
Kullandığım mac agent
iOS job’ın çalışma süresinde ~%60 oranında iyileşme oldu.
Eski süreler (yaklaşık ~30dk):
Yeni süre (yaklaşık ~12dk):
Referanslar:
Connected Products & Engineering Tribe
Mobile Chapter Team Member
Arda DİNLER — iOS Developer