Identifizieren und bedingtes Entfernen von Skriptaufgaben

Abgeschlossen

Azure Pipelines ermöglicht die Ausführung benutzerdefinierter Skripts während der Pipelineausführung von Skriptaufgaben. Bestimmte Bedingungen erfordern jedoch möglicherweise das Entfernen von Skriptaufgaben, z. B. die Pipelinestage oder der zu erstellende Branch. Dadurch kann die Pipelineausführung optimiert und unnötiger Mehraufwand reduziert werden.

Skriptaufgaben in Pipelines stellen ein Sicherheitsrisiko dar, da die Ausführung von beliebigem Code auf dem Agentcomputer zugelassen wird, was möglicherweise zur Offenlegung vertraulicher Informationen und zur Ausführung schädlichen Codes führt. Das Minimieren des Risikos der Offenlegung vertraulicher Informationen beinhaltet das Identifizieren und bedingte Entfernen von Skriptaufgaben, z. B. das vollständige Entfernen einer Skriptaufgabe oder das Ersetzen der Skriptaufgabe durch eine sicherere Alternative, wenn sie einen Befehl enthält, der ein Kennwort oder einen geheimen Schlüssel ausgibt.

Durch das Einrichten von Bedingungen für Skriptaufgaben lässt sich das Risiko der Offenlegung vertraulicher Informationen weiter verringern. Beispielsweise kann das Entfernen einer Skriptaufgabe, die für eine bestimmte Pipelinestage nicht erforderlich ist, die Angriffsfläche für potenzielle Angreifer begrenzen und die Wahrscheinlichkeit einer Sicherheitsverletzung verringern.

In dieser Lerneinheit wird veranschaulicht, wie Skriptaufgaben mithilfe von Azure Pipelines und YAML-Pipelines identifiziert und je nach Bedingung entfernt werden.

Identifizieren der zu entfernenden Skriptaufgaben

Zunächst müssen Sie die Skriptaufgaben identifizieren, die basierend auf bestimmten Bedingungen entfernt werden müssen. Dies lässt sich anhand von Ausdrücken in der YAML-Pipeline erreichen.

Wenn beispielsweise eine Skriptaufgabe für eine bestimmte Stage der Pipeline nicht erforderlich ist, können Sie sie aus dieser Stage entfernen. Dazu können Sie die Eigenschaft „condition“ in der YAML-Pipeline verwenden, um einen Ausdruck anzugeben, der bestimmt, ob die Skriptaufgabe ausgeführt werden soll.

jobs:
- job: Build
  steps:
  - script: |
      echo "This script task should only run during the Build stage"
    condition: eq(variables['System.StageName'], 'Build')
  - script: |
      echo "This script task should run during all stages"

In diesem Beispiel wird die erste Skriptaufgabe nur ausgeführt, wenn der Stagename „Build“ lautet, während die zweite Skriptaufgabe in allen Stages ausgeführt wird.

Sie können die erste Skriptaufgabe aus der Pipeline entfernen, ohne die zweite Skriptaufgabe zu entfernen. Außerdem können Sie die zweite Skriptaufgabe in anderen Pipelinestages wiederverwenden. Es ist hilfreich, dieselbe Skriptaufgabe in mehreren Stages auszuführen. Sie können beispielsweise eine Skriptaufgabe ausführen, um ein Projekt in der Stage „Build“ zu erstellen, und dann dieselbe Skriptaufgabe ausführen, um das Projekt in der Stage „Bereitstellen“ bereitzustellen.

Verwenden der Eigenschaft „condition“

Um eine Skriptaufgabe je nach Bedingung zu entfernen, verwenden Sie die Eigenschaft „condition“ in der YAML-Pipeline. Mit dieser Eigenschaft können Sie einen Ausdruck definieren, der bestimmt, ob die Skriptaufgabe ausgeführt werden soll.

Verwenden Sie beispielsweise folgenden Ausdruck, um eine Skriptaufgabe zu entfernen, wenn eine bestimmte Variable nicht festgelegt ist:

jobs:
- job: Build
  steps:
  - script: |
      echo "This script task will only run if MY_VARIABLE is set"
    condition: ne(variables['MY_VARIABLE'], '')

In diesem Beispiel wird die Skriptaufgabe nur ausgeführt, wenn die Variable MY_VARIABLE festgelegt ist.

Testen der Pipeline

Nachdem Sie Änderungen an der YAML-Pipeline vorgenommen haben, müssen Sie sie unbedingt testen, um sicherzustellen, dass die Skriptaufgaben ordnungsgemäß entfernt werden.

Zum Testen der Pipeline müssen Sie sie ausführen und sicherstellen, dass die Skriptaufgaben nicht ausgeführt werden, wenn sie entfernt werden sollen.

Probieren Sie es aus!

Erstellen Sie eine neue YAML-Pipeline, die eine Skriptaufgabe basierend auf dem zu erstellenden Branch bedingt entfernt. Stellen Sie sicher, dass die Skriptaufgabe beim Erstellen des angegebenen Branchs nicht ausgeführt wird.

Weitere Informationen zu Pipelinebedingungen und Decorators finden Sie hier: