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
Ten przewodnik ułatwia migrację z usługi Travis do usługi Azure Pipelines. Pokazano w nim, jak przetłumaczyć konfigurację usługi Travis na konfigurację usługi Azure Pipelines.
Podstawowe różnice
Usługi Travis i Azure Pipelines różnią się na wiele sposobów, w tym:
Kompilacje Travis mają etapy, zadania i fazy, podczas gdy usługa Azure Pipelines zawiera kroki rozmieszczania i wykonywania w dowolnej kolejności lub grupowaniu.
Usługa Azure Pipelines umożliwia przechowywanie definicji zadań i kroków w oddzielnych plikach YAML w tym samym lub innym repozytorium. Takie podejście umożliwia udostępnianie kroków w wielu potokach.
Usługa Azure Pipelines zapewnia pełną obsługę kompilowania i testowania obrazów zarządzanych przez firmę Microsoft w systemach Linux, Windows i macOS. Aby uzyskać więcej informacji na temat hostowanych agentów, zobacz Agenci hostowani przez firmę Microsoft.
Wymagania wstępne
- Konto usługi GitHub, na którym można utworzyć repozytorium. Utwórz je bezpłatnie.
- Organizacja: Azure DevOps. Utwórz je bezpłatnie. Jeśli Twój zespół ma już organizację usługi Azure DevOps, upewnij się, że jesteś administratorem projektu usługi Azure DevOps, którego chcesz użyć.
- Możliwość uruchamiania potoków na agentach hostowanych przez firmę Microsoft. Możesz kupić zadanie równoległe lub zażądać warstwy Bezpłatna.
- Podstawowa wiedza na temat usługi Azure Pipelines. Jeśli dopiero zaczynasz korzystać z usługi Azure Pipelines, zobacz następujące artykuły, aby dowiedzieć się więcej o usłudze Azure Pipelines i sposobie jej działania przed rozpoczęciem migracji:
Język
Travis używa słowa kluczowego language , aby zidentyfikować wstępne środowisko kompilacji do skonfigurowania dla kompilacji. Aby na przykład wybrać Node.js 16.x:
.travis.yml
language: node_js
node_js:
- 22
Agenci hostowani przez firmę Microsoft domyślnie zawierają zestawy SDK dla wielu języków. Aby użyć określonej wersji językowej, może być konieczne użycie zadania wyboru języka w celu skonfigurowania środowiska.
Aby na przykład wybrać Node.js 16.x:
azure-pipelines.yml
steps:
- task: UseNode@1
inputs:
version: '22.x'
Mapowania języków
Słowo kluczowe language w Travis CI działa zarówno jako wersja używanych narzędzi językowych, jak i ukryty sygnał, że wiele kroków kompilacji jest wykonywanych. W usłudze Azure Pipelines określ polecenia, które chcesz uruchomić.
Oto przewodnik tłumaczenia ze słowa kluczowego language do poleceń wykonywanych automatycznie dla najczęściej używanych języków:
| Język | Polecenia |
|---|---|
ccpp |
./configuremakemake install |
csharp |
nuget restore [solution.sln]msbuild /p:Configuration=Release [solution.sln] |
clojure |
lein depslein test |
go |
go get -t -v ./...make
lubgo test |
javagroovy |
Gradle:gradle assemblegradle checkMaven: mvn install -DskipTests=true -Dmaven.javadoc.skip=true -B -Vmvn test -BAnt: ant test |
node_js |
npm install
lubnpm cilubyarnnpm test |
objective-cswift |
pod install
lubbundle exec pod installxcodebuild -scheme [scheme] build test \| xcpretty |
perl |
cpanm --quiet --installdeps --notest .Build.PL: perl ./Build.pl./Build testMakefile.PL: perl Makefile.PLmake testPlik programu Make: make test |
php |
phpunit |
python |
pip install -r requirements.txt |
ruby |
bundle install --jobs=3 --retry=3rake |
Możesz włączyć mniej typowe języki, ale wymagają innego kroku instalacji zależności lub wykonania wewnątrz kontenera platformy Docker:
| Język | Polecenia |
|---|---|
crystal |
docker run -v $(pwd):/src -w /src crystallang/crystal shards installdocker run -v $(pwd):/src -w /src crystallang/crystal crystal spec |
d |
sudo wget http://master.dl.sourceforge.net/project/d-apt/files/d-apt.list -O /etc/apt/sources.list.d/d-apt.listsudo apt-get updatesudo apt-get -y --allow-unauthenticated install --reinstall d-apt-keyringsudo apt-get updatesudo apt-get install dmd-compiler dubdub test --compiler=dmd |
dart |
wget https://dl-ssl.google.com/linux/linux_signing_key.pub -O - \| sudo apt-key add -wget https://storage.googleapis.com/download.dartlang.org/linux/debian/dart_stable.list -O /etc/apt/sources.list.d/dart_stable.listsudo apt-get updatesudo apt-get install dart/usr/lib/dart/bin/pub get/usr/lib/dart/bin/pub run test |
erlang |
sudo apt-get install rebarrebar get-depsrebar compilerebar skip_deps=true eunit |
elixir |
sudo apt-get install elixirmix local.rebar --forcemix local.hex --forcemix deps.getmix test |
haskell |
sudo apt-get install cabal-installcabal install --only-dependencies --enable-testscabal configure --enable-testscabal buildcabal test |
haxe |
sudo apt-get install haxeyes \| haxelib install [hxml]haxe [hxml] |
julia |
sudo apt-get install juliajulia -e "using Pkg; Pkg.build(); end"julia --check-bounds=yes -e "Pkg; Pkg.test(coverage=true); end" |
nix |
docker run -v $(pwd):/src -w /src nixos/nix nix-build |
perl6 |
sudo apt-get install rakudoPERL6LIB=lib prove -v -r --exec=perl6 t/ |
rust |
curl -sSf https://sh.rustup.rs | sh -s -- -ycargo build --verbosecargo test --verbose |
scala |
echo "deb https://repo.scala-sbt.org/scalasbt/debian /" | /etc/apt/sources.list.d/sbt.listsudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2EE0EA64E40A89B84B2DF73499E82A75642AC823sudo apt-get updatesudo apt-get install sbtsbt ++2.11.6 test |
smalltalk |
docker run -v $(pwd):/src -w /src hpiswa/smalltalkci smalltalkci |
Wybór wielu języków
Można również skonfigurować środowisko, które obsługuje tworzenie różnych aplikacji w wielu językach. Aby na przykład upewnić się, że środowisko kompilacji jest przeznaczone zarówno Node.JS 16.x, jak i Ruby 3.2 lub nowsze:
azure-pipelines.yml
steps:
- task: UseNode@1
inputs:
version: '8.x'
- task: UseRubyVersion@0
inputs:
versionSpec: '>= 3.2'
Fazy
W usłudze Travis kroki są definiowane w stałym zestawie nazwanych faz, takich jak before_install lub before_script. Usługa Azure Pipelines nie ma nazwanych faz i kroków można grupować, nazwać i organizować w dowolny sposób dla potoku.
Na przykład:
.travis.yml
before_install:
- npm install -g bower
install:
- npm install
- bower install
script:
- npm run build
- npm test
azure-pipelines.yml
steps:
- script: npm install -g bower
- script: npm install
- script: bower install
- script: npm run build
- script: npm test
Alternatywnie kroki można grupować i opcjonalnie nazwać:
azure-pipelines.yml
steps:
- script: |
npm install -g bower
npm install
bower install
displayName: 'Install dependencies'
- script: npm run build
- script: npm test
Zadania równoległe
Travis zapewnia równoległość, umożliwiając definiowanie etapu, który jest grupą zadań wykonywanych równolegle. Kompilacja Travis może mieć wiele etapów; po zakończeniu wszystkich zadań na etapie rozpoczyna się następny etap.
Za pomocą usługi Azure Pipelines można wykonać każdy krok lub etap zależny od dowolnego innego kroku. W ten sposób można określić, które kroki są uruchamiane szeregowo i które mogą być uruchamiane równolegle. Dzięki temu można uruchamiać wiele kroków równolegle po zakończeniu jednego kroku, a następnie z powrotem do wentylatora za pomocą jednego kroku, który zostanie uruchomiony później. Ten model udostępnia opcje definiowania złożonych przepływów pracy w razie potrzeby. Na razie oto prosty przykład:
Na przykład, aby uruchomić skrypt kompilacji, po zakończeniu uruchom testy jednostkowe i testy integracji równolegle, a po zakończeniu wszystkich testów spakuj artefakty, a następnie uruchom wdrożenie w środowisku przedprodukcyjnym:
.travis.yml
jobs:
include:
- stage: build
script: ./build.sh
- stage: test
script: ./test.sh unit_tests
- script: ./test.sh integration_tests
- stage: package
script: ./package.sh
- stage: deploy
script: ./deploy.sh pre_prod
azure-pipelines.yml
jobs:
- job: build
steps:
- script: ./build.sh
- job: test1
dependsOn: build
steps:
- script: ./test.sh unit_tests
- job: test2
dependsOn: build
steps:
- script: ./test.sh integration_tests
- job: package
dependsOn:
- test1
- test2
script: ./package.sh
- job: deploy
dependsOn: package
steps:
- script: ./deploy.sh pre_prod
Zaawansowane wykonywanie równoległe
W usłudze Azure Pipelines masz więcej opcji i kontrolę nad sposobem organizowania potoku.
Na przykład zespół ma zestaw szybkich testów jednostkowych oraz inny zestaw i wolniejsze testy integracji. Zespół chce rozpocząć tworzenie pliku .ZIP dla wydania zaraz po zakończeniu lekcji, ponieważ zapewniają wysoką pewność, że kompilacja zapewnia dobry pakiet. Jednak przed wdrożeniem w środowisku przedprodukcyjnym chcą poczekać na zakończenie wszystkich testów:
W usłudze Azure Pipelines mogą to zrobić w następujący sposób:
azure-pipelines.yml
jobs:
- job: build
steps:
- script: ./build.sh
- job: test1
dependsOn: build
steps:
- script: ./test.sh unit_tests
- job: test2
dependsOn: build
steps:
- script: ./test.sh integration_tests
- job: package
dependsOn: test1
script: ./package.sh
- job: deploy
dependsOn:
- test1
- test2
- package
steps:
- script: ./deploy.sh pre_prod
Ponowne użycie kroków
W usłudze Travis można użyć macierzy do uruchamiania wielu wykonań w ramach jednej konfiguracji. W usłudze Azure Pipelines można używać macierzy w taki sam sposób, ale można również zaimplementować ponowne użycie konfiguracji za pomocą szablonów.
Przykład: zmienna środowiskowa w macierzy
Jednym z najpopularniejszych sposobów uruchamiania kilku kompilacji z niewielkimi odchyleniami jest zmiana wykonywania przy użyciu zmiennych środowiskowych. Na przykład skrypt kompilacji może wyszukać obecność zmiennej środowiskowej i zmienić sposób kompilowania oprogramowania lub sposobu testowania oprogramowania.
Użyj macierzy, aby uruchomić konfigurację kompilacji kilka razy, raz dla każdej wartości w zmiennej środowiskowej. Na przykład uruchom dany skrypt trzy razy, za każdym razem z innym ustawieniem zmiennej środowiskowej:
.travis.yml
os: osx
env:
jobs:
- MY_ENVIRONMENT_VARIABLE: 'one'
- MY_ENVIRONMENT_VARIABLE: 'two'
- MY_ENVIRONMENT_VARIABLE: 'three'
script: echo $MY_ENVIRONMENT_VARIABLE
azure-pipelines.yml
pool:
vmImage: 'macOS-latest'
strategy:
matrix:
set_env_to_one:
MY_ENVIRONMENT_VARIABLE: 'one'
set_env_to_two:
MY_ENVIRONMENT_VARIABLE: 'two'
set_env_to_three:
MY_ENVIRONMENT_VARIABLE: 'three'
steps:
- script: echo $(MY_ENVIRONMENT_VARIABLE)
Przykład: wersje językowe w macierzy
Innym typowym scenariuszem jest uruchomienie w kilku różnych środowiskach językowych. Funkcja Travis obsługuje niejawną definicję przy użyciu słowa kluczowego language , podczas gdy usługa Azure Pipelines oczekuje jawnego zadania definiującego sposób konfigurowania tej wersji językowej.
Możesz użyć opcji macierzy zmiennych środowiskowych w usłudze Azure Pipelines, aby włączyć macierz dla różnych wersji językowych. Można na przykład ustawić zmienną środowiskową w każdej zmiennej macierzy odpowiadającej wersji języka, której chcesz użyć, a następnie w pierwszym kroku użyć tej zmiennej środowiskowej, aby uruchomić zadanie konfiguracji języka:
.travis.yml
os: linux
jobs:
include:
- rvm: 2.3.7
- rvm: 2.4.4
- rvm: 2.5.1
script: ruby --version
azure-pipelines.yml
vmImage: 'ubuntu-latest'
strategy:
matrix:
ruby 2.3:
ruby_version: '2.3.7'
ruby 2.4:
ruby_version: '2.4.4'
ruby 2.5:
ruby_version: '2.5.1'
steps:
- task: UseRubyVersion@0
inputs:
versionSpec: $(ruby_version)
- script: ruby --version
Przykład: Systemy operacyjne w macierzy
Często można również uruchamiać kompilacje w wielu systemach operacyjnych. Funkcja Travis obsługuje tę definicję przy użyciu słowa kluczowego os , a usługa Azure Pipelines umożliwia skonfigurowanie systemu operacyjnego przez wybranie puli do uruchomienia przy użyciu słowa kluczowego vmImage .
Można na przykład ustawić zmienną środowiskową w każdej zmiennej macierzy odpowiadającej obrazowi systemu operacyjnego, który ma być używany. Następnie należy ustawić pulę maszyn na ustawioną zmienną:
.travis.yml
jobs:
include:
- os: linux
- os: windows
- os: osx
script: echo Hello, world!
azure-pipelines.yml
strategy:
matrix:
linux:
imageName: 'ubuntu-latest'
mac:
imageName: 'macOS-latest'
windows:
imageName: 'windows-latest'
pool:
vmImage: $(imageName)
steps:
- script: echo Hello, world!
Obsługa powodzenia i niepowodzeń
Funkcja Travis umożliwia określenie kroków, które są uruchamiane w przypadku pomyślnego zakończenia kompilacji, za pomocą fazy after_success, lub gdy kompilacja kończy się niepowodzeniem, za pomocą fazy after_failure. Korzystając z usługi Azure Pipelines, można zdefiniować warunki powodzenia i niepowodzenia w oparciu o wynik dowolnego kroku, co umożliwia bardziej elastyczne i zaawansowane potoki.
.travis.yml
build: ./build.sh
after_success: echo Success
after_failure: echo Failed
azure-pipelines.yml
steps:
- script: ./build.sh
- script: echo Success
condition: succeeded()
- script: echo Failed
condition: failed()
Zaawansowana obsługa sukcesów i niepowodzeń
W usłudze Azure Pipelines można programować elastyczny zestaw zależności i warunków sterowania przepływem między zadaniami.
Zadania można skonfigurować tak, aby były uruchamiane na podstawie powodzenia lub niepowodzenia poprzednich zadań lub na podstawie zmiennych środowiskowych.
Można nawet skonfigurować zadania tak, aby zawsze działały, niezależnie od powodzenia innych zadań.
Jeśli na przykład chcesz uruchomić skrypt, gdy kompilacja zakończy się niepowodzeniem, ale tylko wtedy, gdy jest uruchomiona jako kompilacja w gałęzi głównej:
azure-pipelines.yml
jobs:
- job: build
steps:
- script: ./build.sh
- job: alert
dependsOn: build
condition: and(failed(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
steps:
- script: ./sound_the_alarms.sh
Wstępnie zdefiniowane zmienne
Zarówno Travis, jak i Azure Pipelines ustawiają wiele zmiennych środowiskowych, aby ułatwić inspekcję i interakcję ze środowiskiem wykonawczym systemu CI.
W większości przypadków zmienna usługi Azure Pipelines jest zgodna ze zmienną środowiskową w usłudze Travis. Oto lista często używanych zmiennych środowiskowych w usłudze Travis i ich analogia w usłudze Azure Pipelines:
| Travis | Azure Pipelines | opis |
|---|---|---|
CI=true lub TRAVIS=true |
TF_BUILD=True |
Wskazuje, że kompilacja jest uruchomiona w systemie ciągłej integracji; przydatne w przypadku skryptów, które są również przeznaczone do uruchamiania lokalnego podczas programowania. |
TRAVIS_BRANCH |
Kompilacje ciągłej integracji:BUILD_SOURCEBRANCHKompilacje żądań ściągnięcia: SYSTEM_PULLREQUEST_TARGETBRANCH |
Nazwa gałęzi, dla którego jest kolejkowana kompilacja, lub nazwa gałęzi, dla którego jest kierowane żądanie ściągnięcia. |
TRAVIS_BUILD_DIR |
BUILD_SOURCESDIRECTORY |
Lokalizacja wyewidencjonowane źródło i domyślny katalog roboczy. |
TRAVIS_BUILD_NUMBER |
BUILD_BUILDID |
Unikatowy identyfikator liczbowy dla wywołania bieżącej kompilacji. |
TRAVIS_COMMIT |
Kompilacje ciągłej integracji:BUILD_SOURCEVERSION |
Identyfikator zatwierdzenia, który jest obecnie kompilowany. |
TRAVIS_COMMIT |
Kompilacje żądań ściągnięcia:git rev-parse HEAD^2 |
W przypadku kompilacji weryfikacji żądań ściągnięcia usługa Azure Pipelines ustawia BUILD_SOURCEVERSION na wynikowe zatwierdzenie scalania żądania ściągnięcia do głównego. To polecenie identyfikuje samo zatwierdzenie żądania ściągnięcia. |
TRAVIS_COMMIT_MESSAGE |
BUILD_SOURCEVERSIONMESSAGE |
Komunikat dziennika tworzonego zatwierdzenia. |
TRAVIS_EVENT_TYPE |
BUILD_REASON |
Przyczyna, dla której kompilacja jest w kolejce; mapa wartości znajduje się w poniższej tabeli "przyczyny kompilacji". |
TRAVIS_JOB_NAME |
AGENT_JOBNAME |
Nazwa bieżącego zadania, jeśli zostanie określona. |
TRAVIS_OS_NAME |
AGENT_OS |
System operacyjny, na którym działa zadanie; mapa wartości znajduje się w poniższej tabeli "systemy operacyjne". |
TRAVIS_PULL_REQUEST |
Azure Repos:SYSTEM_PULLREQUEST_PULLREQUESTIDGitHub: SYSTEM_PULLREQUEST_PULLREQUESTNUMBER |
Numer żądania ściągnięcia, który wyzwolił tę kompilację. (W przypadku kompilacji usługi GitHub jest to unikatowy identyfikator, który nie jest numerem żądania ściągnięcia). |
TRAVIS_PULL_REQUEST_BRANCH |
SYSTEM_PULLREQUEST_SOURCEBRANCH |
Nazwa gałęzi, z której pochodzi żądanie ściągnięcia. |
TRAVIS_PULL_REQUEST_SHA |
Kompilacje żądań ściągnięcia:git rev-parse HEAD^2 |
W przypadku kompilacji weryfikacji żądań ściągnięcia usługa Azure Pipelines ustawia BUILD_SOURCEVERSION na wynikowe zatwierdzenie scalania żądania ściągnięcia do głównego. To polecenie identyfikuje samo zatwierdzenie żądania ściągnięcia. |
TRAVIS_PULL_REQUEST_SLUG |
Nazwa rozwidlenia repozytorium, jeśli żądanie ściągnięcia pochodzi z rozwidlenia. W usłudze Azure Pipelines nie ma tego odpowiednika. | |
TRAVIS_REPO_SLUG |
BUILD_REPOSITORY_NAME |
Nazwa repozytorium, dla którego skonfigurowano tę kompilację. |
TRAVIS_TEST_RESULT |
AGENT_JOBSTATUS |
Funkcja Travis ustawia tę wartość na 0 , jeśli wszystkie poprzednie kroki kończą się powodzeniem (zwróć wartość 0). W przypadku usługi Azure Pipelines sprawdź, czy AGENT_JOBSTATUS=Succeeded. |
TRAVIS_TAG |
BUILD_SOURCEBRANCH |
Jeśli ta kompilacja jest umieszczana w kolejce w wyniku utworzenia tagu, ta wartość jest nazwą tego tagu. W przypadku usługi Azure Pipelines parametr BUILD_SOURCEBRANCH jest ustawiony na pełną nazwę odwołania usługi Git, na przykład refs/tags/tag_name. |
TRAVIS_BUILD_STAGE_NAME |
Nazwa etapu w travisie. Jak widzieliśmy wcześniej, usługa Azure Pipelines obsługuje sterowanie przepływem przy użyciu zadań. Możesz odwołać się do .AGENT_JOBNAME |
Przyczyny kompilacji:
Zmienna TRAVIS_EVENT_TYPE zawiera wartości mapowane na wartości udostępniane przez zmienną usługi Azure Pipelines BUILD_REASON :
| Travis | Azure Pipelines | opis |
|---|---|---|
push |
IndividualCI |
Kompilacja to ciągła kompilacja integracji z wypychania. |
pull_request |
PullRequest |
Kompilacja została utworzona w kolejce w celu zweryfikowania żądania ściągnięcia. |
api |
Manual |
Kompilacja została utworzona w kolejce przez interfejs API REST lub żądanie ręczne na stronie internetowej. |
cron |
Schedule |
Zaplanowano kompilację. |
Systemy operacyjne:
Zmienna TRAVIS_OS_NAME zawiera wartości mapowane na wartości udostępniane przez zmienną usługi Azure Pipelines AGENT_OS :
| Travis | Azure Pipelines | opis |
|---|---|---|
linux |
Linux |
Kompilacja jest uruchomiona w systemie Linux. |
osx |
Darwin |
Kompilacja jest uruchomiona w systemie macOS. |
windows |
Windows_NT |
Kompilacja jest uruchomiona w systemie Windows. |
Aby uzyskać więcej informacji, zobacz wstępnie zdefiniowane zmienne środowiskowe.
Jeśli nie ma zmiennej dla potrzebnych danych, użyj komendy powłoki, aby je uzyskać. Na przykład dobrym zamiennikiem zmiennej środowiskowej zawierającej identyfikator zatwierdzenia skompilowanych żądań ściągnięcia jest uruchomienie polecenia git: git rev-parse HEAD^2.
Kompilowanie określonych gałęzi
Domyślnie zarówno Travis, jak i Azure Pipelines wykonują kompilacje ciągłej integracji we wszystkich gałęziach. Podobnie oba systemy umożliwiają ograniczenie tych kompilacji do określonych gałęzi. W usłudze Azure Pipelines lista gałęzi do kompilacji powinna znajdować się na include liście, a gałęzie , które nie mają być kompilowane, powinny znajdować się na liście wykluczania. Obsługiwane są symbole wieloznaczne.
Aby na przykład utworzyć tylko gałąź główną i te, które zaczynają się od słowa "releases":
.travis.yml
branches:
only:
- main
- /^releases.*/
azure-pipelines.yml
trigger:
branches:
include:
- main
- releases*
Buforowanie danych wyjściowych
Usługa Travis obsługuje buforowanie zależności i pośrednie dane wyjściowe kompilacji, aby poprawić czas kompilacji. Usługa Azure Pipelines nie obsługuje buforowania danych wyjściowych kompilacji pośredniej, ale oferuje integrację z usługą Azure Artifacts na potrzeby magazynu zależności.
Moduły podrzędne Git
Travis i Azure Pipelines domyślnie rekursywnie klonują repozytoria git. To ustawienie domyślne oznacza, że agent klonuje podmoduły, co jest przydatne, ponieważ moduły podrzędne zwykle zawierają zależności. Jednak dodatkowe klonowanie zajmuje dodatkowy czas. Jeśli nie potrzebujesz zależności, wyłącz podmoduły klonowania:
.travis.yml
git:
submodules: false
azure-pipelines.yml
checkout:
submodules: false