Öğretici: Jenkins ve Azure DevOps hizmetlerini kullanarak uygulamanızı azure'da Linux sanal makineleri dağıtmaTutorial: Deploy your app to Linux virtual machines in Azure with using Jenkins and Azure DevOps Services

Sürekli tümleştirme (CI) ve sürekli dağıtım (CD), kodunuzu derleyebileceğiniz, yayınlayabileceğiniz ve dağıtabileceğiniz bir işlem hattı oluşturur.Continuous integration (CI) and continuous deployment (CD) form a pipeline by which you can build, release, and deploy your code. Azure DevOps Services, Azure’a dağıtım için eksiksiz ve tam özellikli bir dizi CI/CD otomasyon aracı sağlar.Azure DevOps Services provides a complete, fully featured set of CI/CD automation tools for deployment to Azure. Jenkins, CI/CD otomasyonu sağlayan, popüler bir üçüncü taraf CI/CD sunucu tabanlı aracıdır.Jenkins is a popular third-party CI/CD server-based tool that also provides CI/CD automation. Bulut uygulamanızı ve hizmetinizi nasıl sunacağınızı özelleştirmek için Azure DevOps Services ve Jenkins’i birlikte kullanabilirsiniz.You can use Azure DevOps Services and Jenkins together to customize how you deliver your cloud app or service.

Bu öğreticide, Node.js web uygulaması derlemek için Jenkins’i kullanacaksınız.In this tutorial, you use Jenkins to build a Node.js web app. Ardından, Linux sanal makineleri (VM’ler) içerenYou then use Azure DevOps to deploy it

bir dağıtım grubuna dağıtmak için Azure DevOps kullanın.to a deployment group that contains Linux virtual machines (VMs). Aşağıdakileri nasıl yapacağınızı öğrenirsiniz:You learn how to:

  • Örnek uygulamayı alma.Get the sample app.
  • Jenkins eklentilerini yapılandırma.Configure Jenkins plug-ins.
  • Node.js için Jenkins Serbest stil projesi yapılandırma.Configure a Jenkins Freestyle project for Node.js.
  • Azure DevOps Services tümleştirmesi için Jenkins’i yapılandırın.Configure Jenkins for Azure DevOps Services integration.
  • Jenkins hizmet uç noktası oluşturma.Create a Jenkins service endpoint.
  • Azure sanal makineleri için dağıtım grubu oluşturma.Create a deployment group for the Azure virtual machines.
  • Bir Azure işlem hatları yayın işlem hattı oluşturursunuz.Create an Azure Pipelines release pipeline.
  • El ile ve CI ile tetiklenen dağıtımlar yürütme.Execute manual and CI-triggered deployments.

Başlamadan önceBefore you begin

Örnek uygulamayı almaGet the sample app

Bir Git deposunda depolanan, dağıtılacak bir uygulamanız olması gerekir.You need an app to deploy, stored in a Git repository. Bu öğretici için, GitHub’dan erişebileceğiniz bu örnek uygulamayı kullanmanızı öneririz.For this tutorial, we recommend that you use this sample app available from GitHub. Bu öğretici, Node.js ve bir uygulama yüklemek için kullanılan örnek bir betik içerir.This tutorial contains a sample script that's used for installing Node.js and an application. Kendi deponuzla çalışmak istiyorsanız benzer bir örnek yapılandırmanız gerekir.If you want to work with your own repository, you should configure a similar sample.

Bu uygulamanın çatalını oluşturun ve bu öğreticinin daha sonraki adımlarında kullanmak üzere konumu (URL) not edin.Create a fork of this app and take note of the location (URL) for use in later steps of this tutorial. Daha fazla bilgi için bkz. Depo çatalı oluşturma.For more information, see Fork a repo.

Not

Uygulama, Yeoman aracılığıyla oluşturulmuştur.The app was built through Yeoman. Express, bower ve grunt kullanır.It uses Express, bower, and grunt. Ayrıca bağımlılıklar olarak bazı npm paketlerini içerir.And it has some npm packages as dependencies. Örnek, Nginx’i ayarlayan ve uygulamayı dağıtan bir betik de içerir.The sample also contains a script that sets up Nginx and deploys the app. Sanal makinelerde yürütülür.It is executed on the virtual machines. Betik özellikle:Specifically, the script:

  1. Node, Nginx ve PM2'yi yükler.Installs Node, Nginx, and PM2.
  2. Nginx ve PM2’yi yapılandırır.Configures Nginx and PM2.
  3. Düğüm uygulamasını başlatır.Starts the Node app.

Jenkins eklentilerini yapılandırmaConfigure Jenkins plug-ins

İlk olarak, iki Jenkins eklentileri yapılandırmanız gerekir: NodeJS ve VS Team Services ile sürekli dağıtım.First, you must configure two Jenkins plug-ins: NodeJS and VS Team Services Continuous Deployment.

  1. Jenkins hesabınızı açın ve Manage Jenkins (Jenkins’i yönet) seçeneğini belirleyin.Open your Jenkins account and select Manage Jenkins.
  2. Manage Jenkins (Jenkins’i yönet) sayfasında Manage Plugins (Eklentileri yönet) seçeneğini belirleyin.On the Manage Jenkins page, select Manage Plugins.
  3. Listeyi filtreleyerek NodeJS eklentisini bulun ve Yeniden başlatmadan yükle seçeneğini belirleyin.Filter the list to locate the NodeJS plug-in, and select the Install without restart option. Jenkins’e NodeJS eklentisini eklemeAdding the NodeJS plugin to Jenkins
  4. Listeyi filtreleyerek VS Team Services Sürekli Dağıtımı eklentisini bulun ve Yeniden başlatmadan yükle seçeneğini belirleyin.Filter the list to find the VS Team Services Continuous Deployment plug-in and select the Install without restart option.
  5. Jenkins panosuna geri dönüp Manage Jenkins (Jenkins’i yönet) seçeneğini belirleyin.Go back to the Jenkins dashboard and select Manage Jenkins.
  6. Genel Araç Yapılandırması seçeneğini belirleyin.Select Global Tool Configuration. NodeJS öğesini bulun ve NodeJS yüklemeleri seçeneğini belirleyin.Find NodeJS and select NodeJS installations.
  7. Otomatik olarak yükle seçeneğini belirleyin ve bir Ad değeri girin.Select the Install automatically option, and then enter a Name value.
  8. Kaydet’i seçin.Select Save.

Node.js için Jenkins Serbest stil projesi yapılandırmaConfigure a Jenkins Freestyle project for Node.js

  1. Yeni Öğe’yi seçin.Select New Item. Bir öğe adı girin.Enter an item name.
  2. Freestyle project’i (Serbest stil projesi) seçin.Select Freestyle project. Tamam’ı seçin.Select OK.
  3. Kaynak Kodu Yönetimi sekmesinde Git’i seçin ve uygulama kodunuzu içeren deponun ve dalın ayrıntılarını girin.On the Source Code Management tab, select Git and enter the details of the repository and the branch that contain your app code.
    Derlemenize bir depo eklemeAdd a repo to your build
  4. Derleme Tetikleyicileri sekmesinde SCM’yi Yokla seçeneğini belirleyin ve üç dakikada bir Git deposundaki değişiklikleri yoklamak için H/03 * * * * zamanlamasını girin.On the Build Triggers tab, select Poll SCM and enter the schedule H/03 * * * * to poll the Git repository for changes every three minutes.
  5. Derleme Ortamı sekmesinde Düğüm & npm bin/ klasör YOLUNU sağla seçeneğini belirleyin ve NodeJS Yüklemesi değerini seçin.On the Build Environment tab, select Provide Node & npm bin/ folder PATH and select the NodeJS Installation value. npmrc dosyası değerini use system default olarak ayarlanmış şekilde bırakın.Leave npmrc file set to use system default.
  6. Derleme sekmesinde Kabuk yürüt’ü seçin ve npm install komutunu girerek tüm bağımlılıkların güncelleştirildiğinden emin olun.On the Build tab, select Execute shell and enter the command npm install to ensure that all dependencies are updated.

Azure DevOps Services tümleştirmesi için Jenkins’i yapılandırmaConfigure Jenkins for Azure DevOps Services integration

Not

Aşağıdaki adımlar için kullandığınız kişisel erişim belirtecinin, Azure DevOps Services’ta Yayınlama (okuma, yazma, yürütme ve yönetme) iznini içerdiğinden emin olun.Ensure that the personal access token (PAT) you use for the following steps contains the Release (read, write, execute and manage) permission in Azure DevOps Services.

  1. Önceden oluşturmadıysanız, Azure DevOps Services kuruluşunuzda bir PAT oluşturun.Create a PAT in your Azure DevOps Services organization if you don't already have one. Jenkins, Azure DevOps Services kuruluşunuza erişmek için bu bilgileri zorunlu tutar.Jenkins requires this information to access your Azure DevOps Services organization. Bu bölümün ilerleyen kısımlarındaki adımlar için belirteç bilgilerini saklayın.Be sure to store the token information for upcoming steps in this section.

    Belirteç oluşturma hakkında bilgi edinmek için Azure DevOps Services için nasıl kişisel erişim belirteci oluştururum? bölümünü okuyun.To learn how to generate a token, read How do I create a personal access token for Azure DevOps Services?.

  2. Derleme Sonrası Eylemler sekmesinde Derleme sonrası eylem ekle seçeneğini belirleyin.In the Post-build Actions tab, select Add post-build action. Yapıtları arşivle’yi seçin.Select Archive the artifacts.

  3. Arşivlenecek dosyalar için **/* değerini girerek tüm dosyaları dahil edin.For Files to archive, enter **/* to include all files.

  4. Başka bir eylem oluşturmak için Derleme sonrası eylem ekle’yi seçin.To create another action, select Add post-build action.

  5. TFS/Team Services’te yayınlamayı tetikle seçeneğini belirleyin.Select Trigger release in TFS/Team Services. Azure DevOps Services kuruluşunuz için https://{your-organization-name}.visualstudio.com gibi bir URI girin.Enter the URI for your Azure DevOps Services organization, such as https://{your-organization-name}.visualstudio.com.

  6. Proje adını girin.Enter the Project name.

  7. Yayın işlem hattı için bir ad seçin.Choose a name for the release pipeline. (Bu işlem hattını daha sonra Azure DevOps Services’ta oluşturun.)(You create this release pipeline later in Azure DevOps Services.)

  8. Azure DevOps Services veya Team Foundation Server ortamınıza bağlanmak için kimlik bilgilerini girin:Choose credentials to connect to your Azure DevOps Services or Team Foundation Server environment:

    • Azure DevOps Services kullanıyorsanız, Kullanıcı adı alanını boş bırakın.Leave Username blank if you are using Azure DevOps Services.
    • Team Foundation Server’ın şirket içi bir sürümünü kullanıyorsanız kullanıcı adı ve parola girin.Enter a username and password if you are using an on-premises version of Team Foundation Server.
      Jenkins derleme sonrası eylemlerini yapılandırma
  9. Jenkins projesini kaydedin.Save the Jenkins project.

Jenkins hizmet uç noktası oluşturmaCreate a Jenkins service endpoint

Hizmet uç noktası, Azure DevOps Services’ın Jenkins’e bağlanmasına olanak sağlar.A service endpoint allows Azure DevOps Services to connect to Jenkins.

  1. Azure DevOps Services’ta Hizmetler sayfasını açın, Yeni Hizmet Uç Noktası listesini açın ve Jenkins’i seçin.Open the Services page in Azure DevOps Services, open the New Service Endpoint list, and select Jenkins. Jenkins uç noktası eklemeAdd a Jenkins endpoint
  2. Bağlantı için bir ad girin.Enter a name for the connection.
  3. Jenkins sunucunuzun URL’sini girin ve Güvenilmeyen SSL sertifikalarını kabul et seçeneğini belirleyin.Enter the URL of your Jenkins server, and select the Accept untrusted SSL certificates option. Örnek bir URL: http://{YourJenkinsURL}.westcentralus.cloudapp.azure.com.An example URL is http://{YourJenkinsURL}.westcentralus.cloudapp.azure.com.
  4. Jenkins hesabınız için kullanıcı adı ve parolayı girin.Enter the username and password for your Jenkins account.
  5. Bilgilerin doğru olup olmadığını denetlemek için Bağlantıyı doğrula’yı seçin.Select Verify connection to check that the information is correct.
  6. Hizmet uç noktasını oluşturmak için Tamam’ı seçin.Select OK to create the service endpoint.

Azure sanal makineleri için dağıtım grubu oluşturmaCreate a deployment group for Azure virtual machines

Yayın işlem hattının sanal makinenize dağıtılabilmesi için Azure DevOps Services aracısını kaydetmek üzere bir dağıtım grubunuz olması gerekir.You need a deployment group to register the Azure DevOps Services agent so the release pipeline can be deployed to your virtual machine. Dağıtım grupları, dağıtım için hedef makinelerin mantıksal gruplarının tanımlanmasını ve her bir makineye gerekli aracının yüklenmesini kolaylaştırır.Deployment groups make it easy to define logical groups of target machines for deployment, and to install the required agent on each machine.

Not

Aşağıdaki yordamda, önkoşulları yüklediğinizden ve betiği sudo ayrıcalıklarıyla çalıştırmadığınızdan emin olun.In the following procedure, be sure to install the prerequisites and don't run the script with sudo privileges.

  1. Derleme ve Yayın hub’ının Yayınlar sekmesini açın, Dağıtım grupları’nı açın ve + Yeni’yi seçin.Open the Releases tab of the Build & Release hub, open Deployment groups, and select + New.
  2. Dağıtım grubu için bir ad ve isteğe bağlı bir açıklama girin.Enter a name for the deployment group, and an optional description. Ardından Oluştur’u seçin.Then select Create.
  3. Dağıtım hedefi sanal makineniz için işletim sistemini seçin.Choose the operating system for your deployment target virtual machine. Örneğin, Ubuntu 16.04+ seçeneğini belirleyin.For example, select Ubuntu 16.04+.
  4. Kimlik doğrulaması için betikte kişisel bir erişim belirteci kullan seçeneğini belirleyin.Select Use a personal access token in the script for authentication.
  5. Sistem önkoşulları bağlantısını seçin.Select the System prerequisites link. İşletim sisteminiz için önkoşullarını yükleyin.Install the prerequisites for your operating system.
  6. Betiği panoya kopyala’yı seçerek betiği kopyalayın.Select Copy script to clipboard to copy the script.
  7. Dağıtım hedefi sanal makinenizde oturum açın ve betiği çalıştırın.Log in to your deployment target virtual machine and run the script. Betiği sudo ayrıcalıklarıyla çalıştırmayın.Don't run the script with sudo privileges.
  8. Yüklemeden sonra sizden dağıtım grubu etiketleri istenir.After the installation, you are prompted for deployment group tags. Varsayılanları kabul edin.Accept the defaults.
  9. Azure DevOps Services’ta, Dağıtım Grupları bölümündeki Hedefler kısmında yeni kaydettiğiniz sanal makinenizin olup olmadığını denetleyin.In Azure DevOps Services, check for your newly registered virtual machine in Targets under Deployment Groups.

Bir Azure işlem hatları yayın işlem hattı oluşturmaCreate an Azure Pipelines release pipeline

Yayın işlem hattı, Azure Pipelines’ın uygulamayı dağıtmak için kullandığı işlemi belirtir.A release pipeline specifies the process that Azure Pipelines uses to deploy the app. Bu örnekte, bir kabuk betiği yürütürsünüz.In this example, you execute a shell script.

Azure Pipelines’da yayın işlem hattı oluşturmak için:To create the release pipeline in Azure Pipelines:

  1. Derleme & Yayın hub’ının Yayınlar sekmesini açın ve Yayın işlem hattı oluştur’u seçin.Open the Releases tab of the Build & Release hub, and select Create release pipeline.
  2. Boş şablonunu seçerek Boş işlem ile başlamayı seçin.Select the Empty template by choosing to start with an Empty process.
  3. Yapıtlar bölümünde + Yapıt Ekle seçeneğini belirleyin ve Kaynak türü için Jenkins’i seçin.In the Artifacts section, select + Add Artifact and choose Jenkins for Source type. Jenkins hizmet uç noktası bağlantınızı seçin.Select your Jenkins service endpoint connection. Ardından Jenkins kaynak işini seçin ve Ekle seçeneğini belirleyin.Then select the Jenkins source job and select Add.
  4. Ortam 1’in yanındaki üç noktayı seçin.Select the ellipsis next to Environment 1. Dağıtım grubu aşaması ekle’yi seçin.Select Add deployment group phase.
  5. Dağıtım grubunuzu seçin.Choose your deployment group.
  6. Dağıtım grubu aşaması’na görev eklemek için + seçeneğini belirleyin.Select + to add a task to Deployment group phase.
  7. Kabuk Betiği görevini seçin ve Ekle seçeneğini belirleyin.Select the Shell Script task and select Add. Kabuk Betiği görevi, Node.js’yi yükleyip uygulamayı başlatmak için her bir sunucuda çalıştırılacak bir betik için yapılandırmayı sağlar.The Shell Script task provides the configuration for a script to run on each server in order to install Node.js and start the app.
  8. Betik Yolu için $(System.DefaultWorkingDirectory)/Fabrikam-Node/deployscript.sh girin.For Script Path, enter $(System.DefaultWorkingDirectory)/Fabrikam-Node/deployscript.sh.
  9. Gelişmiş’i seçin ve Çalışma Dizinini Belirtin seçeneğini etkinleştirin.Select Advanced, and then enable Specify Working Directory.
  10. Çalışma Dizini için $(System.DefaultWorkingDirectory)/Fabrikam-Node girin.For Working Directory, enter $(System.DefaultWorkingDirectory)/Fabrikam-Node.
  11. Yayın işlem hattının adını, Jenkins’te derlemenin Derleme Sonrası Eylemler sekmesinde belirttiğiniz ad olacak şekilde düzenleyin.Edit the name of the release pipeline to the name that you specified on the Post-build Actions tab of the build in Jenkins. Jenkins, kaynak yapıtlar güncelleştirildiğinde yeni yayını tetikleyebilmesi için bu adı zorunlu tutar.Jenkins requires this name to be able to trigger a new release when the source artifacts are updated.
  12. Kaydet’i seçin ve Tamam’ı seçerek yayın işlem hattını kaydedin.Select Save and select OK to save the release pipeline.

El ile ve CI ile tetiklenen dağıtımlar yürütmeExecute manual and CI-triggered deployments

  1. + Yayın’ı seçin ve Yayın Oluştur seçeneğini belirleyin.Select + Release and select Create Release.
  2. Vurgulanan açılır listede tamamladığınız derlemeyi seçin ve Kuyruk seçeneğini belirleyin.Select the build that you completed in the highlighted drop-down list, and select Queue.
  3. Açılır iletide yayın bağlantısını seçin.Choose the release link in the pop-up message. Örneğin: "Yayın -1 yayını oluşturuldu."For example: "Release Release-1 has been created."
  4. Yayın konsolu çıktısını izlemek için Günlükler sekmesini açın.Open the Logs tab to watch the release console output.
  5. Tarayıcınızda, dağıtım grubunuza eklediğiniz sunuculardan birinin URL’sini açın.In your browser, open the URL of one of the servers that you added to your deployment group. Örneğin, http://{your-server-ip-address} girin.For example, enter http://{your-server-ip-address}.
  6. Kaynak Git deposuna gidin ve app/views/index.jade dosyasındaki h1 başlığının içeriklerini, değiştirilen bazı metinlerle değiştirin.Go to the source Git repository and modify the contents of the h1 heading in the file app/views/index.jade with some changed text.
  7. Değişikliğinizi işleyin.Commit your change.
  8. Birkaç dakika sonra, Azure DevOps’un Yayınlar sayfasında yeni bir yayının oluşturulduğunu görürsünüz.After a few minutes, you will see a new release created on the Releases page of Azure DevOps. Gerçekleşen dağıtımı görmek için yayını açın.Open the release to see the deployment taking place. Tebrikler!Congratulations!

Jenkins eklentisiyle ilgili sorunları gidermeTroubleshooting the Jenkins plugin

Jenkins eklentileriyle ilgili hatalarla karşılaşırsanız Jenkins JIRA sayfasında söz konusu bileşenle ilgili sorun bildirebilirsiniz.If you encounter any bugs with the Jenkins plugins, file an issue in the Jenkins JIRA for the specific component.

Sonraki adımlarNext steps

Bu öğreticide, derleme için Jenkins’i ve yayın için Azure DevOps Services’ı kullanarak bir uygulamanın Azure’a dağıtımını otomatikleştirdiniz.In this tutorial, you automated the deployment of an app to Azure by using Jenkins for build and Azure DevOps Services for release. Şunları öğrendiniz:You learned how to:

  • Jenkins’te uygulamanızı derleme.Build your app in Jenkins.
  • Azure DevOps Services tümleştirmesi için Jenkins’i yapılandırın.Configure Jenkins for Azure DevOps Services integration.
  • Azure sanal makineleri için dağıtım grubu oluşturma.Create a deployment group for the Azure virtual machines.
  • VM’leri yapılandıran ve uygulamayı dağıtan bir yayın işlem hattı oluşturun.Create a release pipeline that configures the VMs and deploys the app.

LAMP (Linux, Apache, MySQL ve PHP) yığınını dağıtma hakkında bilgi edinmek için sonraki öğreticiye ilerleyin.To learn about how to deploy a LAMP (Linux, Apache, MySQL, and PHP) stack, advance to the next tutorial.