Linux'ta Azure Uygulaması Hizmeti'ne Python web uygulaması dağıtmak için GitHub Actions ile CI/CD kullanma
Linux üzerinde Azure Uygulaması Hizmeti'ne bir Python web uygulaması dağıtmak için GitHub Actions sürekli tümleştirme ve sürekli teslim (CI/CD) platformunu kullanın. GitHub Actions iş akışınız kodu otomatik olarak oluşturur ve depoya bir işleme olduğunda App Service'e dağıtır. GitHub Actions iş akışınıza test betikleri, güvenlik denetimleri ve çoklu dağıtımlar gibi başka otomasyonlar ekleyebilirsiniz.
Uygulama kodunuz için depo oluşturma
Kullanmak için zaten bir Python web uygulamanız varsa, bunun bir GitHub deposuna işlendiğine emin olun.
Çalışmak için bir uygulamaya ihtiyacınız varsa, konumundaki depoyu https://github.com/Microsoft/python-sample-vscode-flask-tutorialçatallayabilir ve kopyalayabilirsiniz. Kod, Visual Studio Code'daki Flask öğreticisinden alınıyor.
Dekont
Uygulamanız Django ve SQLite veritabanı kullanıyorsa bu öğreticide çalışmaz. Django uygulamanız PostgreSQL gibi ayrı bir veritabanı kullanıyorsa bu öğreticiyi kullanabilirsiniz. Django hakkında daha fazla bilgi için bu makalenin devamında Django ile ilgili dikkat edilmesi gerekenler bölümüne bakın.
Hedef Azure Uygulaması Hizmeti oluşturma
App Service örneği oluşturmanın en hızlı yolu, etkileşimli Azure Cloud Shell aracılığıyla Azure komut satırı arabirimini (CLI) kullanmaktır. Cloud Shell, Git ve Azure CLI'yi içerir. Aşağıdaki adımlarda az webapp up kullanarak hem App Service'i oluşturacak hem de uygulamanızın ilk dağıtımını yapacaksınız.
1. Adım. https://portal.azure.com adresinden Azure portalında oturum açın.
2. Adım. Portal araç çubuğunda Cloud Shell simgesini seçerek Azure CLI'yi açın.
3. Adım. Cloud Shell'de açılan listeden Bash'i seçin.
4. Adım. Cloud Shell'de git clone kullanarak deponuzu kopyalayın. Örneğin, Flask örnek uygulamasını kullanıyorsanız komutu şu şekildedir:
git clone https://github.com/<github-user>/python-sample-vscode-flask-tutorial.git
github-user> değerini deponun çatalını oluşturduğunuz GitHub hesabının adıyla değiştirin<. Farklı bir uygulama deposu kullanıyorsanız, GitHub Actions'ı burada ayarlayacaksınız.
Dekont
Cloud Shell, cloud-shell-storage-your-region<> adlı kaynak grubundaki bir Azure Depolama hesabı tarafından desteklenir. Bu depolama hesabı, kopyalanan depoyu depolayan Cloud Shell'in dosya sisteminin bir görüntüsünü içerir. Bu depolama için küçük bir maliyet vardır. Bu makalenin sonunda, oluşturduğunuz diğer kaynaklarla birlikte depolama hesabını silebilirsiniz.
Bahşiş
Cloud Shell'e yapıştırmak için Ctrl+Shift+V'yi kullanın veya sağ tıklayıp bağlam menüsünden Yapıştır'ı seçin.
Adım 5. Cloud Shell'de dizini Python uygulamanızın yer aldığı depo klasörüne dönüştürerek az webapp up komutunun uygulamayı Python olarak tanımasını sağlayın. Örneğin, Flask örnek uygulaması için:
cd python-sample-vscode-flask-tutorial
6. Adım. Cloud Shell'de az webapp up komutunu kullanarak bir App Service oluşturun ve başlangıçta uygulamanızı dağıtın.
az webapp up --name <app-service-name> --runtime "PYTHON:3.9"
Azure'da benzersiz bir App Service adı belirtin. Ad 3-60 karakter uzunluğunda olmalıdır ve yalnızca harf, sayı ve kısa çizgi içerebilir. Ad bir harfle başlamalı ve bir harf veya numarayla bitmelidir.
Kullanılabilir çalışma zamanlarının listesini almak için kullanın az webapp list-runtimes
. PYTHON|X.Y
Python sürümü olan X.Y
biçimini kullanın.
App Service'in konumunu parametresiyle --location
de belirtebilirsiniz. Kullanılabilir konumların az account list-locations --output table
listesini almak için komutunu kullanın.
7. Adım. Uygulamanız özel bir başlangıç komutu kullanıyorsa az webapp config komutunu kullanın. Uygulamanızın özel başlangıç komutu yoksa bu adımı atlayın.
Örneğin, python-sample-vscode-flask-tutorial uygulaması, aşağıdaki gibi kullanabileceğiniz bir başlangıç komutu içeren startup.txt adlı bir dosya içerir:
az webapp config set \
--resource-group <resource-group-name> \
--name <app-service-name> \
--startup-file startup.txt
Kaynak grubu adını önceki az webapp up
komutun çıktısından bulabilirsiniz. Kaynak grubu adı azure-account-name>_rg_ ile <başlar.
8. Adım: Çalışan uygulamayı görmek için bir tarayıcı açın ve http://< app-service-name.azurewebsites.net> adresine gidin.
Genel bir sayfa görürseniz App Service'in başlatılması için birkaç saniye bekleyin ve sayfayı yenileyin. Genel sayfayı görmeye devam ederseniz, doğru klasörden dağıtılıp dağıtılmadığını denetleyin. Örneğin, Flask örnek uygulamasını kullanıyorsanız, bu klasör python-sample-vscode-flask-tutorial klasörüdür. Ayrıca Flask örnek uygulaması için başlangıç komutunu doğru ayarladığınızdan da denetleyin.
App Service'te sürekli dağıtımı ayarlama
Aşağıdaki adımlarda sürekli dağıtım (CD) ayarlayacaksınız. Bu, bir iş akışı tetiklendiğinde yeni bir kod dağıtımının gerçekleştiği anlamına gelir. Bu öğreticideki tetikleyici, çekme isteği (PR) gibi deponuzun ana dalında yapılan herhangi bir değişikliktir.
1. Adım. az webapp deployment github-actions add komutuyla GitHub Action ekleyin .
az webapp deployment github-actions add \
--repo "<github-user>/<github-repo>" \
--resource-group <resource-group-name> \
--branch <branch-name> \
--name <app-service-name> \
--login-with-github
parametresi, --login-with-github
kişisel erişim belirteci almak için etkileşimli bir yöntem kullanır. Kimlik doğrulamasını tamamlamak için istemleri izleyin.
App Service'in kullandığı adla çakıştıran mevcut bir iş akışı dosyası varsa üzerine yazılıp yazılmayacağını seçmeniz istenir. --force
Sormadan üzerine yazmak için parametresini kullanın.
Add komutu ne yapar:
- Deponuzda yeni iş akışı dosyası oluşturur: .github/workflows/<workflow-name.yml>; dosyanın adı App Service'inizin adını içerir.
- App Service'iniz için gizli diziler içeren bir yayımlama profili getirir ve bunu GitHub eylem gizli dizisi olarak ekler. Gizli dizinin adı AZUREAPPSERVICE_PUBLISHPROFILE_ ile başlar. Bu gizli diziye iş akışı dosyasında başvurulur.
2. Adım. az webapp deployment source show komutuyla kaynak denetimi dağıtım yapılandırmasının ayrıntılarını alın.
az webapp deployment source show \
--name <app-service-name> \
--resource-group <resource-group-name>
Komutun çıkışında ve branch
özellikleri için repoUrl
değerleri onaylayın. Bu değerler önceki adımda belirttiğiniz değerlerle eşleşmelidir.
GitHub iş akışı ve eylemleri açıklandı
İş akışı, deponuzdaki /.github/workflows/ yolundaki bir YAML (.yml) dosyası tarafından tanımlanır. Bu YAML dosyası, GitHub deposuyla ilişkili otomatik bir işlem olan iş akışını oluşturan çeşitli adımları ve parametreleri içerir. GitHub'da iş akışıyla herhangi bir proje oluşturabilir, test edebilir, paketleyebilir, yayımlayabilir ve dağıtabilirsiniz.
Her iş akışı bir veya daha fazla işten oluşur. Sırayla her iş bir adım kümesidir. Son olarak, her adım bir kabuk betiği veya bir eylemdir.
App Service'e dağıtım için Python kodunuzla ayarlanan iş akışı açısından iş akışı aşağıdaki eylemlere sahiptir:
Eylem | Açıklama |
---|---|
Ödeme | GitHub Actions aracısı olan bir çalıştırıcıdaki depoya göz atın. |
setup-python | Çalıştırıcıya Python yükleyin. |
appservice-build | Web uygulamasını oluşturun. |
webapps-deploy | Azure'da kimlik doğrulaması yapmak için yayımlama profili kimlik bilgilerini kullanarak web uygulamasını dağıtın. Kimlik bilgisi bir GitHub gizli dizisinde depolanır. |
İş akışını oluşturmak için kullanılan iş akışı şablonu Azure/actions-workflow-samples şeklindedir.
İş akışı, belirtilen dala gönderme olaylarında tetikleniyor. Olay ve dal iş akışı dosyasının başında tanımlanır. Örneğin, aşağıdaki kod parçacığı, iş akışının ana dala gönderme olaylarında tetiklenmiş olduğunu gösterir:
on:
push:
branches:
- main
OAuth yetkili uygulamaları
Sürekli dağıtımı ayarladığınızda, GitHub hesabınız için yetkili bir OAuth Uygulaması olarak Azure Uygulaması Hizmetini yetkilendirmiş olursunuz. App Service, .github/workflows</workflow-name.yml> içinde bir GitHub eylem YML dosyası oluşturmak için yetkili erişimi kullanır. Tümleştirmeler/Uygulamalar bölümünde, GitHub hesaplarınız Ayarlar yetkili uygulamalarınızı görebilir ve izinleri iptal edebilirsiniz.
İş akışı yayımlama profili gizli dizisi
Depoya eklenen .github/workflows/<workflow-name.yml> iş akışı dosyasında, iş akışının dağıtım işi için gereken yayımlama profili kimlik bilgileri için bir yer tutucu görürsünüz. Yayımlama profili bilgileri, Güvenlik/Eylemler altındaki depo Ayarlar şifrelenmiş olarak depolanır.
Bu makalede GitHub eylemi, yayımlama profili kimlik bilgileriyle kimlik doğrulaması yapar. Hizmet sorumlusu veya OpenID Bağlan gibi kimlik doğrulaması yapmanın başka yolları da vardır. Daha fazla bilgi için bkz . GitHub Actions kullanarak App Service'e dağıtma.
İş akışını çalıştırma
Şimdi depoda bir değişiklik yaparak iş akışını test edersiniz.
1. Adım. Örnek depo çatalınıza (veya kullandığınız depoya) gidin ve tetikleyicinin parçası olarak ayarladığınız dalı seçin.
2. Adım. Küçük bir değişiklik yapın.
Örneğin, VS Code Flask öğreticisini kullandıysanız,
- Tetikleyici dalının /hello-app/templates/home.html dosyasına gidin.
- Düzenle'yi seçin ve "Yeniden Dağıtıldı!" metnini ekleyin.
3. Adım. Değişikliği doğrudan çalıştığınız dala işleyin.
- Düzenlemekte olduğunuz sayfanın sağ üst kısmında Değişiklikleri işle ... düğmesini seçin. Değişiklikleri işle penceresi açılır. Değişiklikleri işle penceresinde, isterseniz işleme iletisini değiştirin ve değişiklikleri işle düğmesini seçin.
- İşleme, GitHub Actions iş akışını başlatıyor.
ayrıca iş akışını el ile başlatabilirsiniz.
1. Adım. Sürekli dağıtım için ayarlanan deponun Eylemler sekmesine gidin.
2. Adım. İş akışları listesinden iş akışını seçin ve ardından İş akışını çalıştır'ı seçin.
Başarısız iş akışı sorunlarını giderme
bir iş akışının durumunu denetlemek için deponun Eylemler sekmesine gidin. Bu öğreticide oluşturulan iş akışı dosyasında detaya gittiğinizde iki iş "derleme" ve "dağıtma" görürsünüz. Başarısız bir iş için, hatanın göstergesi için iş görevlerinin çıktısını inceleyin. Yaygın sorunlardan bazıları:
Uygulama eksik bağımlılık nedeniyle başarısız olursa requirements.txt dosyanız dağıtım sırasında işlenmez. Bu davranış, web uygulamasını bu makalede gösterildiği gibi komutunu kullanmak
az webapp up
yerine doğrudan portalda oluşturduysanız oluşur.Uygulama hizmetini portal aracılığıyla sağladıysanız derleme eylemi SCM_DO_BUILD_DURING_DEPLOYMENT ayarı ayarlanmamış olabilir. Bu ayar olarak
true
ayarlanmalıdır. Komut,az webapp up
derleme eylemini otomatik olarak ayarlar."TLS el sıkışması zaman aşımı" hata iletisi görürseniz, zaman aşımının geçici bir sorun olup olmadığını görmek için deponun Eylemler sekmesinde Otomatik dağıtımı tetikle'yi seçerek iş akışını el ile çalıştırın.
Bu öğreticide gösterildiği gibi kapsayıcı uygulaması için sürekli dağıtım ayarlarsanız, iş akışı dosyası (.github/workflows/<workflow-name.yml>) başlangıçta sizin için otomatik olarak oluşturulur. Bunu değiştirdiyseniz, hataya neden olup olmadığını görmek için değişiklikleri kaldırın.
Dağıtım sonrası betiği çalıştırma
Dağıtım sonrası betik, örneğin uygulama kodu tarafından beklenen ortam değişkenlerini tanımlayabilir. Betiği uygulama kodunun bir parçası olarak ekleyin ve başlangıç komutunu kullanarak yürütebilirsiniz.
İş akışı YML dosyanızda değişken değerlerini sabit kodlamaktan kaçınmak için, bunları GitHub web arabiriminde kullanabilir ve ardından betikteki değişken adına başvurabilirsiniz. Bir depo veya ortam (hesap deposu) için şifrelenmiş gizli diziler oluşturabilirsiniz. Daha fazla bilgi için bkz . GitHub Docs'ta şifrelenmiş gizli diziler.
Django için dikkat edilmesi gerekenler
Bu makalede daha önce belirtildiği gibi, ayrı bir veritabanı kullanıyorsanız Django uygulamalarını Linux üzerinde Azure Uygulaması Service'e dağıtmak için GitHub Actions'ı kullanabilirsiniz. App Service db.sqlite3 dosyasını kilitleyerek hem okumaları hem de yazmaları engellediği için SQLite veritabanı kullanamazsınız. Bu davranış dış veritabanını etkilemez.
App Service'te Python uygulamasını yapılandırma - Kapsayıcı başlatma işlemi makalesinde açıklandığı gibi, App Service uygulama kodunuz içinde genellikle uygulama nesnesini içeren bir wsgi.py dosyasını otomatik olarak arar. başlatma komutunu ayarlamak için komutunu kullandığınızda webapp config set
, uygulama nesnesini içeren dosyayı belirtmek için parametresini kullandınız --startup-file
. Komut webapp config set
webapps-deploy eyleminde kullanılamaz. Bunun yerine, başlangıç komutunu belirtmek için parametresini kullanabilirsiniz startup-command
. Örneğin, aşağıdaki kod parçacığı iş akışı dosyasında başlangıç komutunun nasıl belirtileceğini gösterir:
startup-command: startup.txt
Django kullanırken genellikle uygulama kodunu dağıttığınızda komutunu kullanarak python manage.py migrate
veri modellerini geçirmek istersiniz. Geçiş komutunu dağıtım sonrası betiğinde çalıştırabilirsiniz.
GitHub Actions bağlantısını kesme
GitHub Actions'ın App Service'inizle bağlantısını kesmek, uygulama dağıtımını yeniden yapılandırmanıza olanak tanır. Bağlantıyı kestikten sonra iş akışı dosyanıza ne olacağını, dosyanın kaydedilip silinmeyeceğini seçebilirsiniz.
Azure CLI az webapp deployment github-actions remove komutuyla GitHub Actions bağlantısını kesin .
az webapp deployment github-actions remove \
--repo "<github-user>/<github-repo>" \
--resource-group <resource-group-name> \
--branch <branch-name> \
--name <app-service-name> \
--login-with-github
Kaynakları temizleme
Bu öğreticide oluşturulan Azure kaynaklarında ücret yansıtılmasını önlemek için App Service'i ve App Service Planını içeren kaynak grubunu silin.
Azure Cloud Shell dahil olmak üzere Azure CLI'nın yüklendiği her yerde az group delete komutunu kullanarak kaynak grubunu silebilirsiniz.
az group delete --name <resource-group-name>
Cloud Shell için küçük bir aylık ücret gerektiren dosya sistemini koruyan depolama hesabını silmek için cloud-shell-storage- ile başlayan kaynak grubunu silin. Grubun tek kullanıcısı sizseniz kaynak grubunu silmek güvenlidir. Başka kullanıcılar varsa, kaynak grubundaki bir depolama hesabını silebilirsiniz.
Azure kaynak grubunu sildiyseniz, sürekli dağıtım için bağlı olan GitHub hesabında ve deposunda aşağıdaki değişiklikleri de yapmayı göz önünde bulundurun:
- Depoda .github/workflows/<workflow-name.yml> dosyasını kaldırın.
- Depo ayarlarında, iş akışı için oluşturulan AZUREAPPSERVICE_PUBLISHPROFILE_ gizli dizi anahtarını kaldırın.
- GitHub hesabı ayarlarında, GitHub hesabınız için yetkili bir Oauth Uygulaması olarak Azure Uygulaması Hizmeti'ni kaldırın.