Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Azure DevOps Services
Jenkins, serwer automatyzacji typu open source, jest tradycyjnie instalowany przez przedsiębiorstwa we własnych centrach danych i zarządzanych lokalnie. Wielu dostawców oferuje również hosting zarządzany przez usługę Jenkins.
Alternatywnie, usługa Azure Pipelines to natywne w chmurze rozwiązanie do ciągłej integracji. Zapewnia ona zarządzanie potokami wielostopniowymi i agentem kompilacji Azure Virtual Machines hostowanymi w chmurze.
Usługa Azure Pipelines oferuje również w pełni lokalną opcję z usługą Azure DevOps Server dla klientów, którzy mają problemy ze zgodnością lub zabezpieczeniami, które wymagają od nich zachowania kodu i tworzenia w centrum danych przedsiębiorstwa.
Ponadto usługa Azure Pipelines obsługuje modele chmury hybrydowej i modeli lokalnych. Usługa Azure Pipelines może zarządzać orkiestracją kompilacji i wydaniami oraz umożliwia korzystanie z agentów zarówno w chmurze, jak i zainstalowanych na miejscu.
Ten artykuł zawiera przewodnik dotyczący tłumaczenia konfiguracji potoku serwera Jenkins na usługę Azure Pipelines. Zawiera on informacje na temat przenoszenia kompilacji opartych na kontenerach i wybierania agentów kompilacji, mapowania zmiennych środowiskowych oraz sposobu obsługi powodzenia i niepowodzeń potoku kompilacji.
Konfiguracja
Zapoznasz się ze znanym przejściem z potoku deklaratywnego usługi Jenkins do konfiguracji YAML usługi Azure Pipelines. Te dwa są koncepcyjnie podobne, obsługując "konfigurację jako kod" i umożliwiając sprawdzenie konfiguracji w systemie kontroli wersji. W przeciwieństwie do Jenkins usługa Azure Pipelines używa jednak standardu YAML stosowanego w branży do konfigurowania potoku kompilacji.
Pojęcia między usługami Jenkins i Azure Pipelines i sposób ich konfigurowania są podobne. Plik Jenkinsfile zawiera co najmniej jeden etap procesu kompilacji, z których każdy zawiera co najmniej jeden krok , który jest wykonywany w kolejności. Na przykład etap "build" może uruchomić zadanie w celu zainstalowania zależności wymaganych podczas budowania, a następnie wykonać krok kompilacji. Podczas gdy etap "testowy" może wywołać uprzężę testową względem plików binarnych utworzonych na etapie kompilacji.
Przykład:
Jenkinsfile
pipeline {
agent none
stages {
stage('Build') {
steps {
sh 'npm install'
sh 'npm run build'
}
}
stage('Test') {
steps {
sh 'npm test'
}
}
}
}
Plik jenkinsfile łatwo tłumaczy się na konfigurację YAML usługi Azure Pipelines z zadaniem odpowiadającym każdemu etapowi i krokami do wykonania w każdym zadaniu:
azure-pipelines.yml
jobs:
- job: Build
steps:
- script: npm install
- script: npm run build
- job: Test
steps:
- script: npm test
Kompilacje oparte na kontenerach
Używanie kontenerów w potoku budowania pozwala na budowanie i testowanie w obrazie Dockera zawierającym dokładne zależności, które są potrzebne potokowi i które są już skonfigurowane. Pozwala to zaoszczędzić na konieczności uwzględnienia kroku kompilacji, który instaluje więcej oprogramowania lub konfiguruje środowisko. Zarówno usługi Jenkins, jak i Azure Pipelines obsługują kompilacje oparte na kontenerach.
Ponadto zarówno Jenkins, jak i Azure Pipelines umożliwiają udostępnianie katalogu kompilacji z agenta hosta do woluminu kontenera przy użyciu flagi -v dla Docker. Dzięki temu można połączyć wiele zadań kompilacji, które mogą używać tych samych źródeł i zapisywać w tym samym katalogu wyjściowym. Jest to szczególnie przydatne w przypadku korzystania z wielu różnych technologii w stosie; możesz utworzyć backend przy użyciu kontenera .NET Core i frontend z kontenerem TypeScript.
Aby na przykład uruchomić kompilację w kontenerze ubuntu 22.04 ("Jammy"), a następnie uruchomić testy w kontenerze Ubuntu 24.04 ("Noble"):
Jenkinsfile
pipeline {
agent none
stages {
stage('Build') {
agent {
docker {
image 'ubuntu:jammy'
args '-v $HOME:/build -w /build'
}
}
steps {
sh 'make'
}
}
stage('Test') {
agent {
docker {
image 'ubuntu:noble'
args '-v $HOME:/build -w /build'
}
}
steps {
sh 'make test'
}
}
}
}
Usługa Azure Pipelines udostępnia zadania kontenera umożliwiające uruchamianie kompilacji w kontenerze:
azure-pipelines.yml
resources:
containers:
- container: jammy
image: ubuntu:jammy
- container: noble
image: ubuntu:noble
jobs:
- job: build
container: jammy
steps:
- script: make
- job: test
dependsOn: build
container: noble
steps:
- script: make test
Ponadto usługa Azure Pipelines udostępnia zadanie platformy Docker , które umożliwia uruchamianie, kompilowanie lub wypychanie obrazu.
Wybór agenta
Jenkins oferuje wybór agenta kompilacji przy użyciu opcji agent, aby upewnić się, że potok kompilacji — lub określony etap potoku — działa na określonej maszynie agenta kompilacji. Podobnie usługa Azure Pipelines oferuje wiele opcji konfigurowania miejsca uruchamiania środowiska kompilacji.
Wybór hostowanego agenta
Usługa Azure Pipelines oferuje agentów kompilacji hostowanych w chmurze dla kompilacji systemów Linux, Windows i macOS. Aby wybrać środowisko kompilacji, możesz użyć odpowiedniego polecenia.
vmimage słowo kluczowe. Aby na przykład wybrać kompilację systemu macOS:
pool:
vmimage: macOS-latest
Ponadto można określić container i określić obraz platformy Docker w celu uzyskania bardziej szczegółowej kontroli nad sposobem uruchamiania kompilacji.
Wybór agenta lokalnego
Jeśli hostujesz agentów kompilacji lokalnie, możesz zdefiniować agenta kompilacji "możliwości" na podstawie architektury maszyny lub zainstalowanego na nim oprogramowania. Jeśli na przykład skonfigurowaliśmy lokalnego agenta kompilacji z java funkcjami, możesz upewnić się, że zadanie działa na nim przy użyciu słowa kluczowego demands :
pool:
demands: java
Zmienne środowiskowe
W usłudze Jenkins zwykle definiuje się zmienne środowiskowe dla całego pipeline'u. Aby na przykład ustawić dwie zmienne środowiskowe, CONFIGURATION=debug i PLATFORM=x86:
Jenkinsfile
pipeline {
agent any
environment {
CONFIGURATION = 'debug'
PLATFORM = 'x64'
}
stages {
stage('Build') {
steps {
sh 'echo $CONFIGURATION $PLATFORM'
}
}
}
}
Podobnie w usłudze Azure Pipelines można skonfigurować zmienne, które są używane zarówno w ramach konfiguracji YAML, jak i są ustawiane jako zmienne środowiskowe podczas wykonywania zadania:
azure-pipelines.yml
variables:
configuration: debug
platform: x64
Ponadto w usłudze Azure Pipelines można zdefiniować zmienne, które są ustawiane tylko podczas określonego zadania:
azure-pipelines.yml
jobs:
- job: debug build
variables:
configuration: debug
steps:
- script: ./build.sh $(configuration)
- job: release build
variables:
configuration: release
steps:
- script: ./build.sh $(configuration)
Wstępnie zdefiniowane zmienne
Zarówno narzędzia Jenkins, jak i Azure Pipelines ustawiają szereg zmiennych środowiskowych , które ułatwiają inspekcję i interakcję ze środowiskiem wykonywania systemu ciągłej integracji.
| Description | Jenkins | Azure Pipelines |
|---|---|---|
| Unikatowy identyfikator liczbowy dla wywołania bieżącej kompilacji. | BUILD_NUMBER |
BUILD_BUILDNUMBER |
| Unikatowy identyfikator (niekoniecznie liczbowy) dla wywołania bieżącej kompilacji. | BUILD_ID |
BUILD_BUILDID |
| Adres URL, który wyświetla dzienniki kompilacji. | BUILD_URL |
Ta wartość nie jest ustawiana jako zmienna środowiskowa w usłudze Azure Pipelines, ale można ją uzyskać z innych zmiennych. 1 |
| Nazwa maszyny uruchomionej w bieżącej kompilacji. | NODE_NAME |
AGENT_NAME |
| Nazwa tego projektu lub definicji kompilacji. | JOB_NAME |
RELEASE_DEFINITIONNAME |
| Do identyfikacji kompilacji używa się ciągu znaków; numer kompilacji jest dobrym unikatowym identyfikatorem. | BUILD_TAG |
BUILD_BUILDNUMBER |
| Adres URL hosta wykonującego kompilację. | JENKINS_URL |
SYSTEM_TEAMFOUNDATIONCOLLECTIONURI |
| Unikatowy identyfikator funkcji wykonawczej kompilacji lub agenta kompilacji, który jest obecnie uruchomiony. | EXECUTOR_NUMBER |
AGENT_NAME |
| Lokalizacja wyewidencjonowanych źródeł. | WORKSPACE |
BUILD_SOURCESDIRECTORY |
| Identyfikator zatwierdzenia Git odpowiadający wersji tworzonego oprogramowania. | GIT_COMMIT |
BUILD_SOURCEVERSION |
| Ścieżka do repozytorium Git w usłudze GitHub, usłudze Azure Repos lub innego dostawcy repozytorium. | GIT_URL |
BUILD_REPOSITORY_URI |
| Tworzona gałąź Git. | GIT_BRANCH |
BUILD_SOURCEBRANCH |
1 Aby uzyskać adres URL, który wyświetla dzienniki kompilacji w usłudze Azure Pipelines, połącz następujące zmienne środowiskowe w tym formacie:
${SYSTEM_TEAMFOUNDATIONCOLLECTIONURI}/${SYSTEM_TEAMPROJECT}/_build/results?buildId=${BUILD_BUILDID}
Zarządzanie sukcesami i porażkami
Narzędzie Jenkins umożliwia uruchamianie poleceń po zakończeniu budowy, korzystając z sekcji potoku post. Można określić polecenia uruchamiane, gdy kompilacja zakończy się pomyślnie (przy użyciu sekcji success), gdy zakończy się niepowodzeniem (przy użyciu sekcji failure) lub zawsze (przy użyciu sekcji always). Przykład:
Jenkinsfile
post {
always {
echo "The build has finished"
}
success {
echo "The build succeeded"
}
failure {
echo "The build failed"
}
}
Podobnie usługa Azure Pipelines ma bogatą strukturę wykonywania warunkowego, która umożliwia uruchamianie zadania lub kroków zadania na podstawie wielu warunków, w tym powodzenia lub niepowodzenia potoku.
Aby emulować instrukcje warunkowe Jenkins post-build, można zdefiniować zadania uruchamiane na podstawie warunków always(), succeeded() lub failed().
azure-pipelines.yml
jobs:
- job: always
steps:
- script: echo "The build has finished"
condition: always()
- job: success
steps:
- script: echo "The build succeeded"
condition: succeeded()
- job: failed
steps:
- script: echo "The build failed"
condition: failed()
Uwaga / Notatka
Usługa Jenkins obsługuje dodatkowe post warunki wykraczające poza always, successi failure:
-
changed: działa tylko wtedy, gdy bieżące uruchomienie potoku ma inny status zakończenia niż poprzednie uruchomienie. -
fixed: działa tylko wtedy, gdy bieżący przebieg zakończy się pomyślnie, a poprzedni przebieg zakończył się niepowodzeniem lub był niestabilny. -
unstable: Działa tylko wtedy, gdy bieżące uruchomienie potoku ma stan "niestabilny" (zazwyczaj spowodowany błędami testów). -
cleanup: Działa po ocenie wszystkich innych warunków końcowych, niezależnie od stanu Pipeline.
W usłudze Azure Pipelines można osiągnąć podobną funkcjonalność przy użyciu warunków z wyrażeniami, takimi jak eq(variables['Agent.JobStatus'], 'SucceededWithIssues') w przypadku niestabilnych kompilacji.
Ponadto można połączyć inne warunki, takie jak możliwość uruchamiania zadania w zależności od powodzenia lub niepowodzenia pojedynczego zadania, zmiennych środowiskowych lub środowiska wykonawczego, w celu utworzenia zaawansowanego potoku wykonawczego.
Obsługa poświadczeń
Narzędzie Jenkins udostępnia credentials() pomocnik w environment dyrektywie w celu bezpiecznego wstrzykiwania poświadczeń do potoku. Usługa Jenkins obsługuje kilka typów poświadczeń, w tym tekst tajny, pary nazwy użytkownika/hasła i pliki wpisów tajnych.
Jenkinsfile
pipeline {
agent any
environment {
AWS_ACCESS_KEY_ID = credentials('aws-access-key-id')
AWS_SECRET_ACCESS_KEY = credentials('aws-secret-access-key')
}
stages {
stage('Deploy') {
steps {
sh 'aws s3 ls'
}
}
}
}
W Azure Pipelines można zarządzać tajnymi przy użyciu grup zmiennych, integracji z Azure Key Vault lub przez definiowanie zmiennych tajnych bezpośrednio w potoku.
azure-pipelines.yml
variables:
- group: my-aws-credentials # Variable group linked to Azure Key Vault or containing secrets
jobs:
- job: Deploy
steps:
- script: aws s3 ls
env:
AWS_ACCESS_KEY_ID: $(AWS_ACCESS_KEY_ID)
AWS_SECRET_ACCESS_KEY: $(AWS_SECRET_ACCESS_KEY)
Można również bezpośrednio odnosić się do sekretów z Azure Key Vault, używając zadania AzureKeyVault@2:
steps:
- task: AzureKeyVault@2
inputs:
azureSubscription: 'my-azure-subscription'
KeyVaultName: 'my-key-vault'
SecretsFilter: 'AWS-ACCESS-KEY-ID,AWS-SECRET-ACCESS-KEY'
- script: aws s3 ls
env:
AWS_ACCESS_KEY_ID: $(AWS-ACCESS-KEY-ID)
AWS_SECRET_ACCESS_KEY: $(AWS-SECRET-ACCESS-KEY)