Freigeben über


Erstellen und Testen von Ruby-Apps

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022

Erfahren Sie, wie Sie Azure-Pipelines verwenden, um Ihre Ruby-Anwendungen automatisch zu erstellen, zu testen und bereitzustellen.

Voraussetzungen

Ruby ist auf von Microsoft gehosteten Agents für Linux, macOS und Windows vorinstalliert. Sie müssen nichts mehr einrichten, um Ruby-Projekte zu erstellen. Informationen dazu, welche Ruby-Versionen vorinstalliert sind, finden Sie unter Software.

Produkt Anforderungen
Azure DevOps – Ein Azure DevOps-Projekt.
– Eine Möglichkeit zum Ausführen von Pipelines auf von Microsoft gehosteten Agenten. Sie können entweder einen parallelen Auftrag erwerben oder ein kostenloses Kontingent anfordern.
- Grundkenntnisse in YAML und Azure Pipelines. Weitere Informationen finden Sie unter Erstellen Ihrer ersten Pipeline.
- Berechtigungen:
     – Um eine Pipeline zu erstellen: Sie müssen sich in der Gruppe "Mitwirkende" befinden, und die Gruppe muss die Berechtigung "Erstellen einer Build-Pipeline" auf "Zulassen" gesetzt haben. Mitglieder der Gruppe "Projektadministratoren " können Pipelines verwalten.
    – Um Dienstverbindungen zu erstellen: Sie müssen über die Rolle "Administrator " oder " Ersteller " für Dienstverbindungen verfügen.
GitHub - Ein GitHub-Konto .
– Eine GitHub-Dienstverbindung zum Autorisieren von Azure Pipelines.
Produkt Anforderungen
Azure DevOps – Ein Azure DevOps-Projekt.
– Ein selbst gehosteter Agent, auf dem Ruby installiert ist. Um einen Agent zu erstellen, siehe selbstgehostete Agenten.
- Grundkenntnisse in YAML und Azure Pipelines. Weitere Informationen finden Sie unter Erstellen Ihrer ersten Pipeline.
- Berechtigungen:
    – Um eine Pipeline zu erstellen: Sie müssen sich in der Gruppe "Mitwirkende" befinden, und die Gruppe muss die Berechtigung "Erstellen einer Build-Pipeline" auf "Zulassen" gesetzt haben. Mitglieder der Gruppe "Projektadministratoren " können Pipelines verwalten.
    – Um Dienstverbindungen zu erstellen: Sie müssen über die Rolle "Administrator " oder " Ersteller " für Dienstverbindungen verfügen.
GitHub - Ein GitHub-Konto .
– Eine GitHub-Dienstverbindung zum Autorisieren von Azure Pipelines.

Erstellen der Azure-Pipelines

Führen Sie die folgenden Schritte aus, um eine Pipeline für eine Ruby-App einzurichten.

  1. Melden Sie sich bei Ihrer Azure DevOps-Organisation an, und wechseln Sie zu Ihrem Projekt.

  2. Wechseln Sie zu Pipelines>Neue Pipeline.

  3. Wählen Sie GitHub als Speicherort für Ihren Quellcode aus.

    Möglicherweise werden Sie zu GitHub weitergeleitet, um sich anzumelden. Geben Sie in diesem Fall Ihre Anmeldeinformationen für GitHub ein.

  4. Wählen Sie Ihr Ruby-Beispiel-Repository aus.

  5. Wählen Sie die Ruby Vorlage für Ihre Pipeline aus.

  6. Eine YAML-Datei wird generiert. Wählen Sie Speichern und ausführen aus, >committen Sie direkt in den Main-Branch und wählen Sie dann erneut Speichern und ausführen aus.

  7. Warten Sie, bis der Pipeline-Durchlauf abgeschlossen ist. Dies dauert in der Regel 2 bis 5 Minuten für ein einfaches Ruby-Projekt.

Sie haben nun eine funktionierende YAML-Datei (azure-pipelines.yml) in Ihrem Repository, die automatisch ausgeführt wird, wenn Sie Codeänderungen pushen. Diese Datei kann an die spezifischen Anforderungen Ihres Projekts angepasst werden.

Tipp

Wenn Sie Änderungen an der in diesem Artikel beschriebenen YAML-Datei vornehmen möchten, wählen Sie die Pipeline auf der Seite "Pipelines " aus, und wählen Sie dann "Bearbeiten" für die azure-pipelines.yml Datei aus.

Buildumgebung

Sie können Azure Pipelines verwenden, um Ihre Ruby-Projekte zu erstellen, ohne eine eigene Infrastruktur einrichten zu müssen. Ruby ist auf von Microsoft gehosteten Agents in Azure Pipelines vorinstalliert. Sie können Linux-, macOS- oder Windows-Agents verwenden, um Ihre Builds auszuführen.

Die genauen Versionen von Ruby, die vorinstalliert sind, finden Sie unter von Microsoft gehosteten Agents. Um eine bestimmte Version von Ruby auf von Microsoft gehosteten Agents zu installieren, fügen Sie die Aufgabe "Ruby-Version verwenden " am Anfang Ihrer Pipeline hinzu.

Verwenden einer bestimmten Ruby-Version

Fügen Sie die Aufgabe "Ruby-Version verwenden " hinzu, um die Ruby-Version in Ihrer Pipeline festzulegen. Dieser Ausschnitt fügt Ruby 3.4 oder höher zum Pfad hinzu und legt fest, dass nachfolgende Pipelineaufgaben diese Version verwenden. Informationen dazu, welche Ruby-Versionen auf von Microsoft gehosteten Agents vorinstalliert sind, finden Sie unter Software.

pool:
  vmImage: 'ubuntu-latest' 

steps:
- task: UseRubyVersion@0 
  inputs:
    versionSpec: '>= 3.4' 
    addToPath: true
  displayName: 'Set Ruby version'

Installieren von Rails

Um Rails zu installieren, fügen Sie der Datei den folgenden Codeausschnitt hinzu azure-pipelines.yml .

- script: gem install rails && rails -v
  displayName: 'Install Rails'

Installieren von Abhängigkeiten

Verwenden Sie Bundler, um die Gem-Abhängigkeiten Ihres Projekts zu installieren. Bundler liest Ihre Gemfile und Gemfile.lock und stellt sicher, dass dieselben Gem-Versionen in der Pipeline wie in Ihrer Entwicklungsumgebung installiert sind.

- script: |
    gem install bundler
    bundle install --retry=3 --jobs=4
  displayName: 'Install dependencies with Bundler'

Der --retry=3-Schalter wiederholt fehlgeschlagene Installationen bis zu 3 Mal, und --jobs=4å ermöglicht die parallele Installation von Gems für schnellere Builds.

Rake ausführen

Wenn Sie Rake im Kontext des aktuellen Bundles ausführen möchten (wie in Ihrer Gemfile-Datei definiert), fügen Sie der Datei den folgenden Codeausschnitt hinzu azure-pipelines.yml .

- script: bundle exec rake
  displayName: 'bundle exec rake'

Veröffentlichen von Testergebnissen

Der Beispielcode enthält Komponententests, die mit RSpec geschrieben wurden. Wenn Rake im vorherigen Schritt ausgeführt wird, werden die RSpec-Tests ausgeführt. Die RSpec RakeTask in der Rakefile ist zur Erstellung von Ergebnissen im JUnit-Stil mit dem RspecJUnitFormatter konfiguriert.

Fügen Sie die Aufgabe " Testergebnisse veröffentlichen" hinzu, um Testergebnisse im JUnit-Stil auf dem Server zu veröffentlichen.

- task: PublishTestResults@2
  condition: succeededOrFailed()
  inputs:
    testResultsFiles: '**/test-*.xml'
    testRunTitle: 'Ruby tests'

Veröffentlichen von Codeabdeckungsergebnissen

Der Beispielcode verwendet SimpleCov , um Codeabdeckungsdaten zu sammeln, wenn Komponententests ausgeführt werden. SimpleCov ist für die Verwendung von Cobertura- und HTML-Berichtsformatierern konfiguriert.

Fügen Sie die Aufgabe " Codeabdeckungsergebnisse veröffentlichen" hinzu, um Codeabdeckungsergebnisse auf dem Server zu veröffentlichen. Auf diese Weise können Sie Abdeckungsmetriken in der Buildzusammenfassung anzeigen und HTML-Berichte zur weiteren Analyse herunterladen.

- task: PublishCodeCoverageResults@2
  inputs:
    codeCoverageTool: Cobertura
    summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/coverage.xml'
    reportDirectory: '$(System.DefaultWorkingDirectory)/**/coverage'
    failIfCoverageEmpty: true 

Vollständige Beispielpipeline

Hier ist eine vollständige azure-pipelines.yml Datei, die alle in diesem Artikel behandelten Konzepte veranschaulicht. Diese Pipeline:

  • Trigger für Änderungen an der Hauptzweigung
  • Verwendet Ubuntu als Buildumgebung
  • Richtet die angegebene Ruby-Version ein
  • Installiert Projektabhängigkeiten
  • Führt Tests mit Rake aus
  • Veröffentlicht Testergebnisse und Codeabdeckungsmetriken
# Ruby pipeline example
trigger:
- main

pool:
  vmImage: 'ubuntu-latest'

variables:
  rubyVersion: '3.4.7'

steps:
- task: UseRubyVersion@0
  inputs:
    versionSpec: '$(rubyVersion)'
    addToPath: true
  displayName: 'Set Ruby version to $(rubyVersion)'

- script: |
    gem install bundler
    bundle install --retry=3 --jobs=4
  displayName: 'Install dependencies'

- script: bundle exec rake
  displayName: 'Run tests with Rake'

- task: PublishTestResults@2
  condition: succeededOrFailed()
  inputs:
    testResultsFiles: '**/test-*.xml'
    testRunTitle: 'Ruby tests'
  displayName: 'Publish test results'

- task: PublishCodeCoverageResults@2
  inputs:
    codeCoverageTool: Cobertura
    summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/coverage.xml'
    reportDirectory: '$(System.DefaultWorkingDirectory)/**/coverage'
    failIfCoverageEmpty: true
  displayName: 'Publish code coverage'