Held grafiklerini paketleme ve dağıtma görevi

Azure Pipelines

Helk komutlarını çalıştırarak Azure Container Service bir Kubernetes kümesini dağıtmak, yapılandırmak veya güncelleştirmek için bu görevi kullanın. Helk, Kubernetes uygulamalarını, grafikler adlı bir paketleme biçimi kullanarak dağıtmayı ve yönetmeyi sağlayan bir araçtır.

Held kullanarak en karmaşık Kubernetes uygulamasını bile tanımlayabilir, sürüm, paylaşabilir, yükleyebilir ve yükseltebilirsiniz.

  • Helk, hizmet, dağıtımlar, configmaps gibi birden çok Kubernetes bildirimini (YAML), HELI grafikleri adlı tek bir birimde birleştirmenize yardımcı olur. Bir simgeleştirme veya şablon oluşturma aracı oluşturmanız ya da kullanmanız gerekmez.
  • Helb grafikleri, uygulama bağımlılıklarını yönetmenize ve birim olarak geri alma işlemi yapmanıza yardımcı olur. Ayrıca, diğer iş ortağı ekipleriyle oluşturma, sürüm, yayımlama ve paylaşma kolaylardır.

Azure Pipelines held grafikleri için yerleşik desteğe sahiptir:

  • Hele aracı yükleyicisi görevi , aracıların üzerine doğru Held sürümünü yüklemek için kullanılabilir.
  • Helk paketi ve Dağıtım görevi, uygulamayı paketleyip bir Kubernetes kümesine dağıtmak için kullanılabilir. Tiller 'yi bir Kubernetes ad alanına yüklemek veya güncelleştirmek, grafikleri dağıtmak için TLS üzerinden güvenli bir şekilde bağlanmak veya Lintgibi bir Held komutu çalıştırmak için kullanabilirsiniz.
  • Hele görevi bir Azure hizmet bağlantısı kullanarak bir Azure Kubernetes hizmetine bağlanmayı destekler. Kubeconfig veya bir hizmet hesabı kullanarak herhangi bir Kubernetes kümesine bağlanabilirsiniz.
  • Helk dağıtımları Kubectl görevi kullanılarak takıma eklenebilir; Örneğin, Create/Update, ımagepullsecret ve diğerleri.

Hizmet bağlantısı

Görev, Azure Resource Manager ve Kubernetes hizmet bağlantısıolmak üzere iki hizmet bağlantı türü ile birlikte kullanılabilir.

Not

İşlem hattının aşamasında bir Kubernetes kümesine işaret eden bir ortam kaynağı zaten belirtilmişse, hizmet bağlantısı gerekli değildir.

Azure Resource Manager

ParametrelerDescription
connectionType
(Hizmet bağlantı türü)
(Ortam kaynağı zaten mevcut değilse gereklidir) Azure Kubernetes hizmetini kullanmak Azure Resource Manager . Diğer tüm kümelerde Kubernetes hizmet bağlantısı .
Varsayılan değer: Azure Resource Manager
azureSubscriptionEndpoint
(Azure aboneliği)
Istenir Azure hizmet bağlantısının adı.
azureResourceGroup
(Kaynak grubu)
Istenir Abonelik içindeki kaynak grubunun adı.
kubernetesCluster
(Kubernetes kümesi)
Istenir AKS kümesinin adı.
namespace
Uzayına
Seçim Kubectl komutlarının çalıştırıldığı ad alanı. Belirtilmemişse, varsayılan ad alanı kullanılır.

Bu YAML örnek YAML, Kubernetes kümesine başvurmak için Azure Resource Manager nasıl kullanıldığını gösterir. Bu, Held komutlarıyla ve komut için gereken uygun değerlerden biriyle kullanılır:

variables:
  azureSubscriptionEndpoint: Contoso
  azureContainerRegistry: contoso.azurecr.io
  azureResourceGroup: Contoso
  kubernetesCluster: Contoso

- task: HelmDeploy@0
  displayName: Helm deploy
  inputs:
    connectionType: Azure Resource Manager
    azureSubscriptionEndpoint: $(azureSubscriptionEndpoint)
    azureResourceGroup: $(azureResourceGroup)
    kubernetesCluster: $(kubernetesCluster)

Kubernetes hizmet bağlantısı

ParametrelerDescription
kubernetesServiceEndpoint
(Kubernetes hizmet bağlantısı)
(Ortam kaynağı zaten mevcut değilse gereklidir) Bir Kubernetes hizmet bağlantısı seçin.
namespace
Uzayına
Seçim Kubectl komutlarının çalıştırıldığı ad alanı. Belirtilmemişse, varsayılan ad alanı kullanılır.

Bu YAML örnek YAML, Kubernetes kümesine başvurmak için Kubernetes hizmet bağlantısının nasıl kullanıldığını gösterir. Bu, Held komutlarıyla ve komut için gereken uygun değerlerden biriyle kullanılır:

- task: HelmDeploy@0
  displayName: Helm deploy
  inputs:
    connectionType: Kubernetes Service Connection
    kubernetesServiceEndpoint: Contoso

Komut değerleri

Komut girişi şu Held komutlarındanbirini kabul eder: Oluştur/Sil/kullanıma al/al/init/Install/Login/Logout/ls/Package/Rollback/Upgrade.

ParametrelerDescription
command
Komutundaki
Istenir Bir HELI komutu seçin.
Varsayılan değer: ls
arguments
Değişkenlerinden
Hela komut seçenekleri.

Bu YAML örneği ls komutunu göstermektedir:

- task: HelmDeploy@0
  displayName: Helm list
  inputs:
    azureSubscriptionEndpoint: $(azureSubscriptionEndpoint)
    azureResourceGroup: $(azureResourceGroup)
    kubernetesCluster: $(kubernetesCluster)
    command: ls
    arguments: --all

init komutu

ParametrelerDescription
command
Komutundaki
Istenir Bir HELI komutu seçin.
Varsayılan değer: ls
canaryimage
(Kanarya görüntü sürümü kullan)
Tiller 'in en son yayın öncesi sürümü olan kanarya Tiller görüntüsünü kullanın.
Varsayılan değer: false
upgradetiller
(Upgrade Tiller)
Tiller zaten yüklüyse, yükseltin.
Varsayılan değer: true
waitForExecution
Bekleneceğini
Komut yürütmesi tamamlanana kadar engelle.
Varsayılan değer: true
arguments
Değişkenlerinden
Hela komut seçenekleri.

Bu YAML örneği init komutunu göstermektedir:

- task: HelmDeploy@0
  displayName: Helm init
  inputs:
    azureSubscriptionEndpoint: $(azureSubscriptionEndpoint)
    azureResourceGroup: $(azureResourceGroup)
    kubernetesCluster: $(kubernetesCluster)
    command: init
    upgradetiller: true
    waitForExecution: true
    arguments: --client-only

komutu install

ParametrelerDescription
command
Komutundaki
Istenir Bir HELI komutu seçin.
Varsayılan değer: ls
chartType
(Grafik türü)
Istenir Grafik bilgilerini nasıl girmek istediğinizi seçin. Grafiğin adını ya da grafiğin klasör/dosya yolunu sağlayabilirsiniz.
Kullanılabilir seçenekler: Name, FilePath. Varsayılan değer: ad
chartName
(Grafik adı)
Istenir Grafik başvurusu, bu bir URL veya grafik adı olabilir. Örneğin, grafik adı Stable/MySQLise, görev Held Install Stable/MySQL ' i çalıştırır
releaseName
(Yayın adı)
Seçim Yayın adı. Belirtilmemişse, otomatik olarak oluşturulur. releaseName girişi yalnızca ' Install ' ve ' upgrade ' komutları için geçerlidir
overrideValues
(Değerleri ayarla)
Seçim Komut satırındaki değerleri ayarlayın. Değerleri virgülle ayırarak birden çok değer belirtebilirsiniz. Örneğin, KEY1 = val1, key2 = val2 & lt. Ayrıca, bunları yeni satırla sınırlandırarak birden çok değer de belirtebilirsiniz:
key1=val1
key2=val2

Kendisi yeni satırlar içeren bir değere sahipseniz seçeneğini kullanın, yoksa görevin yeni satıra sınırlayıcı valueFile olarak davranması gerekir. Görev, bu ayar değerlerini kullanarak helm komutunu oluşturmak için kullanılır. Örneğin helm install --set key1=val1 ./redis
valueFile
(Değer Dosyası)
(İsteğe bağlı) YAML dosyasındaki veya URL'de değerleri belirtin. Örneğin, myvalues.yaml belirterekhelm install --values=myvalues.yaml
updatedependency
(Bağımlılığı Güncelleştirme)
(İsteğe bağlı) Grafiği yüklemeden önce helm bağımlılık güncelleştirmesini çalıştırın. Requirements.yaml bağımlılıklarını paketlemeden önce charts/ dizinine güncelleştirin.
Varsayılan değer: false
waitForExecution
(Bekle)
(İsteğe bağlı) Komut yürütmesi tamamlayana kadar engelle.
Varsayılan değer: true
arguments
(Bağımsız Değişkenler)
Helm komutu seçenekleri

Bu YAML örneği yükleme komutunu gösteriyor:

- task: HelmDeploy@0
  displayName: Helm install
  inputs:
    azureSubscriptionEndpoint: $(azureSubscriptionEndpoint)
    azureResourceGroup: $(azureResourceGroup)
    kubernetesCluster: $(kubernetesCluster)
    command: install
    chartType: FilePath
    chartPath: Application/charts/sampleapp

package komutu

ParametrelerDescription
command
(Komut)
(Gerekli) Helm komutunu seçin.
Varsayılan değer: ls
chartPath
(Grafik Yolu)
(Gerekli) Yüklenmek için grafiğin yolu. Bu, paketlenmiş bir grafiğin yolu veya paketsiz grafik dizininin yolu olabilir. Örneğin, ./redis belirtilirse, görev helm install ./redis 'i çalıştıracak. Yapıt olarak yayımlanan bir grafiği kullanırsanız yol $(System.DefaultWorkingDirectory)/ARTIFACT-NAME/Charts/CHART-NAME olacaktır
version
(Sürüm)
(İsteğe bağlı) Tam grafik sürümünü belirtin. Bu belirtilmezse, en son sürüm yüklenir. Grafikte sürümü bu semver sürümü olarak ayarlayın.
destination
(Hedef)
(İsteğe bağlı) YAML dosyasındaki veya URL'de değerleri belirtin.
Varsayılan değer: $(Build.ArtifactStagingDirectory)
updatedependency
(Bağımlılığı Güncelleştirme)
(İsteğe bağlı) Grafiği yüklemeden önce helm bağımlılık güncelleştirmesini çalıştırın. Requirements.yaml bağımlılıklarını paketlemeden önce charts/ dizinine güncelleştirin.
Varsayılan değer: false
save
(Kaydet)
(İsteğe bağlı) Paketlenmiş grafiği yerel grafik deposuna kaydedin.
Varsayılan değer: true
arguments
(Bağımsız Değişkenler)
Helm komutu seçenekleri.

Bu YAML örneği paket komutunu gösteriyor:

- task: HelmDeploy@0
  displayName: Helm package
  inputs:
    command: package
    chartPath: Application/charts/sampleapp
    destination: $(Build.ArtifactStagingDirectory)

upgrade komutu

ParametrelerDescription
command
(Komut)
(Gerekli) Helm komutunu seçin.
Varsayılan değer: ls
chartType
(Grafik Türü)
(Gerekli) Grafik bilgilerini nasıl girmek istediğinizi seçin. Grafiğin adını veya grafiğin klasör/dosya yolunu sekleyebilirsiniz.
Kullanılabilir seçenekler: Ad, Dosya Yolu. Varsayılan değer: Ad
chartName
(Grafik Adı)
(Gerekli) Yüklemek için grafik başvurusu, url veya grafik adı olabilir. Örneğin, grafik adı kararlı/mysqlise, görev helm install stable/mysql çalıştıracak
releaseName
(Yayın Adı)
(İsteğe bağlı) Yayın adı. Belirtilmezse, otomatik olarak yenisi olur.
overrideValues
(Değerleri Ayarla)
(İsteğe bağlı) Komut satırı değerlerini ayarlayın. Değerleri virgülle ayırarak birden çok değer belirtebilirsiniz. Örneğin, key1=val1,key2=val2. Ayrıca, bunları yeni satırla sınırlandırarak birden çok değer de belirtebilirsiniz:
key1=val1
key2=val2

Kendisi yeni satırlar içeren bir değere sahipseniz seçeneğini kullanın, yoksa görevin yeni satıra sınırlayıcı valueFile olarak davranması gerekir. Görev, bu ayar değerlerini kullanarak helm komutunu oluşturmak için kullanılır. Örneğin helm install --set key1=val1 ./redis
valueFile
(Değer Dosyası)
(İsteğe bağlı) YAML dosyasındaki veya URL'de değerleri belirtin. Örneğin, myvalues.yaml belirterekhelm install --values=myvalues.yaml
install
(Sürüm yoksa yükle)
(İsteğe bağlı) Bu adla bir sürüm zaten yoksa, bir yükleme başlatın.
Varsayılan değer: true
recreate
(Podları yeniden oluştur)
(İsteğe bağlı) Varsa kaynak için podları yeniden başlatma işlemini gerçekleştirir.
Varsayılan değer: false
resetValues
(Değerleri Sıfırla)
(İsteğe bağlı) Değerleri grafikte yerleşik olarak yer alan değerlerle sıfırlayın.
Varsayılan değer: false
force
(Zorla)
(İsteğe bağlı) Gerekirse kaynak güncelleştirmesini silme/yeniden oluşturun.
Varsayılan değer: false
waitForExecution
(Bekle)
(İsteğe bağlı) Komut yürütmesi tamamlayana kadar engelle.
Varsayılan değer: true
arguments
(Bağımsız Değişkenler)
Helm komutu seçenekleri

Bu YAML örneği yükseltme komutunu gösteriyor:

- task: HelmDeploy@0
  displayName: Helm upgrade
  inputs:
    azureSubscriptionEndpoint: $(azureSubscriptionEndpoint)
    azureResourceGroup: $(azureResourceGroup)
    kubernetesCluster: $(kubernetesCluster)
    command: upgrade
    chartType: filepath
    chartPath: $(Build.ArtifactStagingDirectory)/sampleapp-v0.2.0.tgz
    releaseName: azuredevopsdemo
    install: true
    waitForExecution: false

save komutu

ParametrelerDescription
command
(Komut)
(Gerekli) Helm komutunu seçin.
Varsayılan değer: ls
chartNameForACR
(Azure Container Registry Için grafik adı)
Istenir Grafiğin Azure Container Registry depolanacağı grafik adı.
chartPathForACR
(Azure Container Registry için grafik yolu)
Istenir Grafik dizininin yolu.
azureSubscriptionEndpointForACR
(Container Registry için Azure aboneliği)
Istenir Azure Container Registry olan bir Azure aboneliği seçin.
azureResourceGroupForACR
(Kaynak grubu)
Istenir Container Registry olan bir Azure Kaynak grubu seçin.
azureContainerRegistry
(Azure Container Registry)
Istenir HELI grafiklerini göndermek için kullanılacak bir Azure Container Registry seçin.
arguments
Değişkenlerinden
Hela komut seçenekleri

Bu YAML örneği Kaydet komutunu göstermektedir:

- task: HelmDeploy@0
  displayName: Helm save
  inputs:
    command: save
    chartNameForACR: mycontainerregistry.azurecr.io/helm/hello-world:v1
    chartPathForACR: Application/charts/sampleapp
    azureSubscriptionEndpointForACR: $(azureSubscriptionEndpointForACR)
    azureResourceGroupForACR: $(azureResourceGroupForACR)
    azureContainerRegistry: $(azureContainerRegistry)

Held grafiklerini paketleme ve imzalama

Bu bölümde, bir işlem hattındaki Held grafiklerini paketlemeyi ve imzalamayı öğreneceksiniz.

GPG kullanarak Helm grafiğini imzalamak için özel ortak anahtar çifti oluşturma

  1. GPG'yi indirin.

  2. Komut istemi 'ni yönetici modunda başlatın. GPG kullanarak Helm grafiğini imzalamak için özel ortak anahtar çifti oluşturmak üzere aşağıdaki komutu çalıştırın. Anahtarı oluştururken Kullanıcı adı ve e-posta adresi sorulur. "Ad e-posta adresi" daha sonra oluşturulan özel ortak anahtar çiftini adlandırmak için kullanılır.

    gpg --full-generate-key
    

    Anahtar oluştur

  3. Parolayı girmeniz istenir. Değeri verin ve Tamam ' a tıklayın.

    Parolayı veren ekran görüntüsü.

  4. Anahtarı oluşturduktan sonra, aşağıdaki komutu kullanarak hem özel hem de genel içeren anahtarların listesini görebilirsiniz.

    • Özel anahtarların listesini görmek için

      gpg --list-secret-keys
      

      Özel anahtarlar

    • Ortak anahtarların listesini görmek için

      gpg --list-keys
      

      Ortak anahtarlar

  5. Özel ve ortak anahtarları aşağıda gösterildiği gibi, GPG uzantılı 2 farklı dosyada saklayın.

    • Özel anahtar için
    gpg --export-secret-key 94325E18E53EDD99DD8339C3CFD9DAF0707CB788 contoso@microsoft.com > C:/somepath/privatekeys.gpg
    

    Yukarıda belirtilen yola, privatekeys. GPG dosyasının verildiğini görürsünüz.

    • Ortak anahtar için
    gpg --export-key 94325E18E53EDD99DD8339C3CFD9DAF0707CB788 contoso@microsoft.com > C:/somepath/publickey.gpg
    

    Yukarıdaki belirtilen yola aktarılmış PublicKey. GPG dosyasını görürsünüz.

Azure DevOps ' de, privatekey. gpg dosyasını kitaplık güvenli dosyalar bölümüne kaydedin.

Örnek

pool:
  name: Hosted Ubuntu 1604

variables:
  # The below variable should be secure
  HelmKeyPassphrase: contoso@123
  keyName: contoso contoso@microsoft.com
  azureSubscriptionEndpoint: contoso
  azureResourceGroup: contoso
  kubernetesCluster: contoso

steps:
- task: DownloadSecureFile@1
  displayName: Download Secure file
  inputs:
    secureFile: privatekey.gpg
  name: privateKeyRing

- task: HelmInstaller@0
  displayName: Install Helm 2.12.0
  inputs:
    helmVersion: 2.12.0

- task: HelmDeploy@0
  displayName: helm init
  inputs:
    azureSubscriptionEndpoint: $(azureSubscriptionEndpoint)
    azureResourceGroup: $(azureResourceGroup)
    kubernetesCluster: $(kubernetesCluster)
    command: init
    arguments: --client-only

- task: HelmDeploy@0
  displayName: helm package
  inputs:
    azureSubscriptionEndpoint: $(azureSubscriptionEndpoint)
    azureResourceGroup: $(azureResourceGroup)
    kubernetesCluster: $(kubernetesCluster)
    command: package
    chartPath: Application/charts/sampleapp
    arguments: --sign --key "$(keyName)" --keyring $(privateKeyRing.secureFilePath)
  env:
    HelmKeyPassphrase: $(HelmKeyPassphrase)

Sorun giderme

HelmDeploy görevi ' bilinmeyen bayrak:--wait--helm3.0.2 sürümünde ' Held init--wait--Client ' çalıştırılırken hata veriyor.

Held 2 ve Held 3 arasında bazı önemli değişiklikler vardır. Bunlardan biri, Tiller 'in kaldırılmasını içerir ve bu nedenle helm init komut artık desteklenmez. Helm 3.0+ sürümlerini kullanırken init komutunu kaldırın.

Hele 3 kullanırken, System. Debug true olarak ayarlanmışsa ve Held yükseltmesi kullanılan komuttur, ancak işlem hattı yükseltme başarılı olsa bile başarısız olur.

Bu Helm 3'ün bilinen bir sorunudur ve stderr'e bazı günlükler yazar. Stderr'de günlükler varsa ve çıkış kodu sıfırdan farklıysa Helm Görev Dağıt işlemi başarısız olarak işaretlenir. Stderr'e yazdırılan günlükleri yoksaymak için görev çıkışını failOnStderr: false olarak ayarlayın.

Açık kaynak

Bu görev GitHubaçık kaynağıdır. Geribildirim ve katılımlar hoş geldiniz.