Günlük komutları

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

Günlük komutları, görevlerin ve betiklerin aracıyla iletişim kurma şeklidir. Yeni değişkenler oluşturma, bir adımı başarısız olarak işaretleme ve yapıtları karşıya yükleme gibi eylemleri kapsar. İşlem hattı sorunlarını giderirken günlüğe kaydetme komutları kullanışlıdır.

Önemli

Gizli dizilerin Azure Pipelines çıkışında görünmesini maskeleme çabası gösteririz, ancak yine de önlem almanız gerekir. Gizli dizileri hiçbir zaman çıkış olarak yankılamayın. Bazı işletim sistemleri komut satırı bağımsız değişkenlerini günlüğe kaydeder. Komut satırında gizli dizileri hiçbir zaman geçirmeyin. Bunun yerine gizli dizilerinizi ortam değişkenlerine eşlemenizi öneririz.

Gizli dizilerin alt dizelerini asla maskelemeyiz. Örneğin, "abc123" gizli dizi olarak ayarlandıysa, "abc" günlüklerden maskelenmez. Bu, gizli dizileri çok ayrıntılı bir düzeyde maskeleyerek günlükleri okunamaz hale getirmekten kaçınmaktır. Bu nedenle gizli diziler yapılandırılmış veriler içermemelidir. Örneğin, "{ "foo": "bar" }" gizli dizi olarak ayarlanırsa, "çubuk" günlüklerden maskelenmez.

Tür Komutlar
Görev komutları AddAttachment, Complete, LogDetail, LogIssue, PrependPath, SetEndpoint, SetProgress, SetVariable, SetSecret, UploadFile, UploadSummary
Yapıt komutları İlişkili, Karşıya Yükle
Derleme komutları AddBuildTag, UpdateBuildNumber, UploadLog
Yayın komutları UpdateReleaseName

Günlüğe kaydetme komut biçimi

Günlüğe kaydetme komutunun genel biçimi:

##vso[area.action property1=value;property2=value;...]message

Biraz farklı söz dizimine sahip birkaç biçimlendirme komutu da vardır:

##[command]message

Günlüğe kaydetme komutunu çağırmak için komutu standart çıkış aracılığıyla yankılar.

#!/bin/bash
echo "##vso[task.setvariable variable=testvar;]testvalue"

Dosya yolları mutlak yollar olarak verilmelidir: Windows'ta bir sürücüye veya Linux ve macOS'ta başlayarak / köke dayalıdır.

Not

Linux veya macOS kullanırken günlüğe kaydetme komutundan önce komutunu kullanamazsınız set -x . Bash için geçici olarak devre dışı bırakma set -x hakkında bilgi edinmek için sorun giderme bölümüne bakın.

Biçimlendirme komutları

Not

Günlük komutları için UTF-8 kodlamasını kullanın.

Bu komutlar, Azure Pipelines'da günlük biçimlendiriciye gönderilen iletilerdir. Belirli günlük satırlarını hatalar, uyarılar, daraltılabilir bölümler vb. olarak işaretler.

Biçimlendirme komutları şunlardır:

##[group]Beginning of a group
##[warning]Warning message
##[error]Error message
##[section]Start of a section
##[debug]Debug text
##[command]Command-line being run
##[endgroup]

Bash veya PowerShell görevinde biçimlendirme komutlarını kullanabilirsiniz.

steps:
- bash: |
    echo "##[group]Beginning of a group"
    echo "##[warning]Warning message"
    echo "##[error]Error message"
    echo "##[section]Start of a section"
    echo "##[debug]Debug text"
    echo "##[command]Command-line being run"
    echo "##[endgroup]"

Bu komutlar günlüklerde şu şekilde işlenir:

Özel biçimlendirme seçeneklerine sahip günlüklerin ekran görüntüsü

Bu komut bloğu da daraltılabilir ve şöyle görünür:

Günlüklerin daraltılmış bölümünün ekran görüntüsü

Görev komutları

LogIssue: Hata veya uyarıyı günlüğe kaydetme

##vso[task.logissue]error/warning message

Kullanım

Geçerli görevin zaman çizelgesi kaydında bir hata veya uyarı iletisi günlüğe kaydedin.

Properties

  • type = error veya warning (Gerekli)
  • sourcepath = kaynak dosya konumu
  • linenumber = satır numarası
  • columnnumber = sütun numarası
  • code = hata veya uyarı kodu

Örnek: Hata kaydetme

#!/bin/bash
echo "##vso[task.logissue type=error]Something went very wrong."
exit 1

İpucu

exit 1 isteğe bağlıdır, ancak genellikle bir hata günlüğe kaydedildikten kısa süre sonra vereceğimiz bir komut olur. Denetim Seçenekleri: Hatada devam et'i seçerseniz, exit 1 başarısız derleme yerine kısmen başarılı bir derlemeyle sonuçlanır. Alternatif olarak, kullanabilirsiniz task.logissue type=error.

Örnek: Dosyadaki belirli bir yerle ilgili bir uyarıyı günlüğe kaydetme

#!/bin/bash
echo "##vso[task.logissue type=warning;sourcepath=consoleapp/main.cs;linenumber=1;columnnumber=1;code=100;]Found something that could be a problem."

SetProgress: Tamamlanan yüzdeyi göster

##vso[task.setprogress]current operation

Kullanım

Geçerli görev için ilerleme durumunu ve geçerli işlemi ayarlayın.

Properties

  • value = tamamlanma yüzdesi

Örnek

echo "Begin a lengthy process..."
for i in {0..100..10}
do
   sleep 1
   echo "##vso[task.setprogress value=$i;]Sample Progress Indicator"
done
echo "Lengthy process is complete."

Nasıl göründüğünü görmek için, derlemeyi kaydedip kuyruğa alın ve ardından derlemenin çalışmasını izleyin. Görev bu betiği çalıştırdığında ilerleme göstergesinin değiştiğini gözlemleyin.

Tamamlandı: Zaman çizelgesini bitir

##vso[task.complete]current operation

Kullanım

Geçerli görevin zaman çizelgesi kaydını tamamlayın, görev sonucunu ve geçerli işlemi ayarlayın. Sonuç sağlanmadığında, sonucu başarılı olarak ayarlayın.

Properties

  • result =
    • Succeeded Görev başarılı oldu.
    • SucceededWithIssues Görev sorunlarla karşılaştı. Derleme, en iyi durumda kısmen başarılı olarak tamamlanır.
    • Failed Derleme başarısız olarak tamamlanacak. (Eğer Denetim Seçenekleri: Hatada devam et seçeneği belirlendi, derleme en iyi durumda kısmen başarılı olarak tamamlanacak.)

Örnek

Bir görevi başarılı olarak günlüğe kaydetme.

##vso[task.complete result=Succeeded;]DONE

Görevi başarısız olarak ayarlayın. Alternatif olarak, kullanabilirsiniz exit 1.

- bash: |
    if [ -z "$SOLUTION" ]; then
      echo "##vso[task.logissue type=error;]Missing template parameter \"solution\""
      echo "##vso[task.complete result=Failed;]"
    fi

LogDetail: Görev için zaman çizelgesi kaydı oluşturma veya güncelleştirme

##vso[task.logdetail]current operation

Kullanım

Zaman çizelgesi kayıtlarını oluşturur ve güncelleştirir. Bu, öncelikle Azure Pipelines tarafından adımlar, işler ve aşamalar hakkında rapor vermek için dahili olarak kullanılır. Müşteriler zaman çizelgesine girdiler ekleyebilir ancak bunlar genellikle kullanıcı arabiriminde gösterilmez.

Bir adım sırasında ilk kez gördüğümüzde ##vso[task.detail] , adım için bir "ayrıntı zaman çizelgesi" kaydı oluştururuz. ve tabanlı id iç içe zaman çizelgesi kayıtlarını oluşturabilir ve parentidgüncelleştirebiliriz.

Görev yazarlarının her zaman çizelgesi kaydı için hangi GUID'i kullandıklarını hatırlamaları gerekir. Günlük sistemi, her zaman çizelgesi kaydı için GUID'yi izler, bu nedenle herhangi bir yeni GUID yeni bir zaman çizelgesi kaydına neden olur.

Properties

  • id = Zaman çizelgesi kaydı GUID'i (Gerekli)
  • parentid = Üst zaman çizelgesi kaydı GUID'i
  • type = Kayıt türü (İlk kez gereklidir, üzerine yazılamaz)
  • name = Kayıt adı (İlk kez gerekli, üzerine yazılamıyor)
  • order = zaman çizelgesi kaydının sırası (İlk kez gereklidir, üzerine yazılamaz)
  • starttime = Datetime
  • finishtime = Datetime
  • progress = tamamlanma yüzdesi
  • state = Unknown | Initialized | InProgress | Completed
  • result = Succeeded | SucceededWithIssues | Failed

Örnekler

Yeni kök zaman çizelgesi kaydı oluşturma:

##vso[task.logdetail id=new guid;name=project1;type=build;order=1]create new timeline record

Yeni iç içe zaman çizelgesi kaydı oluşturun:

##vso[task.logdetail id=new guid;parentid=exist timeline record guid;name=project1;type=build;order=1]create new nested timeline record

Güncelleştirme var olan zaman çizelgesi kaydı:

##vso[task.logdetail id=existing timeline record guid;progress=15;state=InProgress;]update timeline record

SetVariable: Değişkenin değerini başlatma veya değiştirme

##vso[task.setvariable]value

Kullanım

taskcontext değişken hizmetinde bir değişken ayarlar. İlk görev bir değişken ayarlayabilir ve aşağıdaki görevler değişkeni kullanabilir. değişkeni, ortam değişkeni olarak aşağıdaki görevlere sunulur.

issecret olarak ayarlandığında truedeğişkeninin değeri gizli dizi olarak kaydedilir ve günlükten maskelenir. Gizli dizi değişkenleri görevlere ortam değişkenleri olarak geçirilmiyor ve bunun yerine giriş olarak geçirilmesi gerekiyor.

isoutput Küme değişkenine true başvurmak için söz dizimine ayarlandığında, bu değişkene aynı işte mi, gelecekteki bir işte mi yoksa gelecekteki bir aşamada mı eriştiğinize bağlı olarak değişir. Ayrıca, aynı iş içinde bu değişkeni kullanmak için söz dizimine ayarlanırsa isoutputfalse ayrıdır. Her kullanım örneği için uygun söz dizimini belirlemek için çıkış değişkenlerinin düzeylerine bakın.

Daha fazla ayrıntı için bkz . betiklerde değişkenleri ayarlama ve değişkenleri tanımlama.

Properties

  • variable = değişken adı (Gerekli)
  • issecret = boole değeri (İsteğe bağlı, varsayılan değer false'tur)
  • isoutput = boole değeri (İsteğe bağlı, varsayılan değer false'tur)
  • isreadonly = boole değeri (İsteğe bağlı, varsayılan değer false'tur)

Örnekler

Değişkenleri ayarlayın:

- bash: |
    echo "##vso[task.setvariable variable=sauce;]crushed tomatoes"
    echo "##vso[task.setvariable variable=secretSauce;issecret=true]crushed tomatoes with garlic"
    echo "##vso[task.setvariable variable=outputSauce;isoutput=true]canned goods"
  name: SetVars

Değişkenleri okuyun:

- bash: |
    echo "Non-secrets automatically mapped in, sauce is $SAUCE"
    echo "Secrets are not automatically mapped in, secretSauce is $SECRETSAUCE"
    echo "You can use macro replacement to get secrets, and they'll be masked in the log: $(secretSauce)"

Konsol çıkışı:

Non-secrets automatically mapped in, sauce is crushed tomatoes
Secrets are not automatically mapped in, secretSauce is 
You can use macro replacement to get secrets, and they'll be masked in the log: ***
Future jobs can also see canned goods
Future jobs can also see canned goods

SetSecret: Bir değeri gizli dizi olarak kaydetme

##vso[task.setsecret]value

Kullanım

Değer, iş süresi boyunca gizli dizi olarak kaydedilir. Değer, bu noktadan sonra günlüklerden maskelenir. Bu komut, bir gizli dizi dönüştürüldüğünde (örn. base64 kodlanmış) veya türetildiğinde kullanışlıdır.

Not: Gizli dizi değerinin önceki oluşumları maskelenmez.

Örnekler

Değişkenleri ayarlayın:

- bash: |
    NEWSECRET=$(echo $OLDSECRET|base64)
    echo "##vso[task.setsecret]$NEWSECRET"
  name: SetSecret
  env:
    OLDSECRET: "SeCrEtVaLuE"

Değişkenleri okuyun:

- bash: |
    echo "Transformed and derived secrets will be masked: $(echo $OLDSECRET|base64)"
  env:
    OLDSECRET: "SeCrEtVaLuE"

Konsol çıkışı:

Transformed and derived secrets will be masked: ***

SetEndpoint: Hizmet bağlantısı alanını değiştirme

##vso[task.setendpoint]value

Kullanım

Verilen değere sahip bir hizmet bağlantısı alanı ayarlayın. Güncelleştirilen değer, aynı iş içinde yürütülen sonraki görevler için uç noktada tutulur.

Properties

  • id = hizmet bağlantı kimliği (Gerekli)
  • field= alan türü, , authParameterdataParameter, veya url (Gerekli)
  • key = anahtar (Gerekli, sürece field = url)

Örnekler

##vso[task.setendpoint id=000-0000-0000;field=authParameter;key=AccessToken]testvalue
##vso[task.setendpoint id=000-0000-0000;field=dataParameter;key=userVariable]testvalue
##vso[task.setendpoint id=000-0000-0000;field=url]https://example.com/service

AddAttachment: Derlemeye dosya ekleme

##vso[task.addattachment]value

Kullanım

Geçerli zaman çizelgesi kaydına ek yükleme ve ekleme. Bu dosyalar günlüklerle indirilemez. Bunlara yalnızca tür veya ad değerleri kullanılarak uzantılar başvurabilir.

Properties

  • type = ek türü (Gerekli)
  • name = ek adı (Gerekli)

Örnek

##vso[task.addattachment type=myattachmenttype;name=myattachmentname;]c:\myattachment.txt

UploadSummary: Derleme özetine bazı Markdown içeriği ekleme

##vso[task.uploadsummary]local file path

Kullanım

Depodaki bir .md dosyasından özet Markdown'ı geçerli zaman çizelgesi kaydına yükleyin ve ekleyin. Bu özet derleme/yayın özetine eklenir ve günlüklerle indirilemez. Özet UTF-8 veya ASCII biçiminde olmalıdır. Özet, işlem hattı çalıştırmanızın Uzantılar sekmesinde görünür. Uzantılar sekmesindeki Markdown işleme, Azure DevOps wiki işlemesinden farklıdır.

Örnekler

##vso[task.uploadsummary]$(System.DefaultWorkingDirectory)/testsummary.md

Komut için kısa bir el formu

##vso[task.addattachment type=Distributedtask.Core.Summary;name=testsummaryname;]c:\testsummary.md

UploadFile: Görev günlükleriyle indirilebilen bir dosyayı karşıya yükleme

##vso[task.uploadfile]local file path

Kullanım

Kullanıcıyla ilgilenen dosyayı geçerli zaman çizelgesi kaydına ek günlük bilgileri olarak yükleyin. Dosya, görev günlükleriyle birlikte indirilebilir olacaktır.

Örnek

##vso[task.uploadfile]c:\additionalfile.log

PrependPath: PATH ortam değişkenine bir yol ekleme

##vso[task.prependpath]local file path

Kullanım

PATH ortam değişkenini PATH'e önceden sabitleyerek güncelleştirin. Güncelleştirilmiş ortam değişkeni sonraki görevlere yansıtılır.

Örnek

##vso[task.prependpath]c:\my\directory\path

Yapıt komutları

İlişkili: Yapıtı başlatma

##vso[artifact.associate]artifact location

Kullanım

Var olan bir Yapıtın bağlantısını oluşturun. Yapıt konumu bir dosya kapsayıcı yolu, VC yolu veya UNC paylaşım yolu olmalıdır.

Properties

  • artifactname = yapıt adı (Gerekli)
  • type = yapıt türü (Gerekli) container | filepath | versioncontrol | gitref | tfvclabel

Örnekler

  • Kapsayıcı

    ##vso[artifact.associate type=container;artifactname=MyServerDrop]#/1/build
    
  • Filepath

    ##vso[artifact.associate type=filepath;artifactname=MyFileShareDrop]\\MyShare\MyDropLocation
    
  • Versioncontrol

    ##vso[artifact.associate type=versioncontrol;artifactname=MyTfvcPath]$/MyTeamProj/MyFolder
    
  • gitref

    ##vso[artifact.associate type=gitref;artifactname=MyTag]refs/tags/MyGitTag
    
  • tfvclabel

    ##vso[artifact.associate type=tfvclabel;artifactname=MyTag]MyTfvcLabel
    
  • Özel Yapıt

    ##vso[artifact.associate artifactname=myDrop;artifacttype=myartifacttype]https://downloads.visualstudio.com/foo/bar/package.zip
    

Karşıya Yükleme: Yapıtı karşıya yükleme

##vso[artifact.upload]local file path

Kullanım

Yerel bir dosyayı dosya kapsayıcısı klasörüne yükleyin ve isteğe bağlı olarak olarak artifactnamebir yapıt yayımlayın.

Properties

  • containerfolder = dosyanın karşıya yükleyeceği klasör, gerekirse klasör oluşturulur.
  • artifactname = yapıt adı. (Gerekli)

Örnek

##vso[artifact.upload containerfolder=testresult;artifactname=uploadedresult]c:\testresult.trx

Not

Artifact.associate ile Artifact.upload arasındaki fark, ilkinin mevcut bir yapıta bağlantı oluşturmak için kullanılabilmesi, ikincisi ise yeni bir Yapıtı karşıya yüklemek/yayımlamak için kullanılabilir olmasıdır.

Derleme komutları

UploadLog: Günlüğü karşıya yükleme

##vso[build.uploadlog]local file path

Kullanım

Kullanıcının ilgilendiği günlüğü derlemenin kapsayıcı "logs\tool" klasörüne yükleyin.

Örnek

##vso[build.uploadlog]c:\msbuild.log

UpdateBuildNumber: Otomatik olarak oluşturulan derleme numarasını geçersiz kılma

##vso[build.updatebuildnumber]build number

Kullanım

İşlem hattı seçeneklerinde belirttiğiniz belirteçlerden otomatik olarak bir derleme numarası oluşturabilirsiniz. Ancak, derleme numarasını ayarlamak için kendi mantığınızı kullanmak istiyorsanız, bu günlük komutunu kullanabilirsiniz.

Örnek

##vso[build.updatebuildnumber]my-new-build-number

AddBuildTag: Derlemeye etiket ekleme

##vso[build.addbuildtag]build tag

Kullanım

Geçerli derleme için bir etiket ekleyin. Etiketi önceden tanımlanmış veya kullanıcı tanımlı bir değişkenle genişletebilirsiniz. Örneğin, burada bash görevine değeriyle last_scanned-$(currentDate)yeni bir etiket eklenir. AddBuildTag ile iki nokta üst üste kullanamazsınız.

Örnek

- task: Bash@3
    inputs:
    targetType: 'inline'
    script: |
        last_scanned="last_scanned-$(currentDate)"
        echo "##vso[build.addbuildtag]$last_scanned"
    displayName: 'Apply last scanned tag'

Yayın komutları

UpdateReleaseName: Geçerli sürümü yeniden adlandır

##vso[release.updatereleasename]release name

Kullanım

Çalışan sürümün yayın adını güncelleştirin.

Not

Sürüm 2020'de başlayan Azure DevOps ve Azure DevOps Server'da desteklenir.

Örnek

##vso[release.updatereleasename]my-new-release-name