3. Avviare la migrazione

Servizi di Azure DevOps

Dopo aver completato i prerequisiti, eseguire l'autenticazione in Azure DevOps e quindi avviare la sincronizzazione iniziale per il repository. Usare l'ID connessione al servizio creato nei prerequisiti all'avvio della migrazione.

Prerequisiti

Requisito dettagli
GUID del repository di Azure DevOps Ottenuto dal comando az repos show --query id per il tuo repository Azure DevOps oppure dalle impostazioni del repository nel portale Azure DevOps.
Agente Linux ospitato localmente Agente installato e registrato nel progetto Azure DevOps e in esecuzione (Online) in Impostazioni progetto>Pool di agenti.
connessione al servizio Azure DevOps a GitHub Creato in Azure DevOps con il PAT dell'amministratore di GitHub Enterprise.
Token di accesso personale GitHub Generato con ambiti obbligatori: repo, admin:org, delete_repo. Il token deve essere valido durante la migrazione (fino a 21 giorni).
autorizzazioni Azure DevOps L'operatore di migrazione deve disporre dell'autorizzazione Enterprise Live Migrations: Manage Migrations.
Accesso alla rete Le regole del firewall consentono al computer agente di comunicare con gli endpoint Azure DevOps (dev.azure.com) e GitHub.
(Facoltativo) ID della connessione della pipeline Creato tramite la connessione di servizio di Azure DevOps per la riconfigurazione della pipeline.
(Facoltativo) Azure Pipelines e Azure Boards Installati Azure Pipelines e Azure Boards nell'azienda di destinazione GitHub.

Se un elemento è incompleto, vedere i prerequisiti prima di continuare.

Eseguire l'autenticazione in Azure DevOps

ELM richiede l'accesso autenticato alle Azure DevOps.

  1. Accedere all'interfaccia della riga di comando di Azure:

    az login
    
  2. Impostare l'organizzazione Azure DevOps predefinita:

    az devops configure --defaults organization=https://dev.azure.com/myorg
    

    Suggerimento

    Se il remote Git locale punta a un'organizzazione diversa, aggiungi --detect false a tutti i comandi di migrazione per impedire al rilevamento automatico di scegliere l'organizzazione sbagliata.

  3. Verificare l'accesso:

    az devops project list
    
  4. Ottenere il GUID del repository:

    az repos show --org https://dev.azure.com/<org>
                  --project <project>
                  --repository <repo-name>
                  --query id
                  -o tsv
    

Avviare l'agente

L'agente Linux self-hosted deve essere online e in ascolto prima di avviare una migrazione.

Obbligatorio: avvio dell'agente interattivo

Completare questi passaggi per avviare l'agente in modo interattivo. Questo passaggio è obbligatorio per la migrazione.

  1. Controllare lo stato dell'agente nel portale di Azure DevOps in Project Impostazioni>Agent pool. Selezionare il pool, aprire la scheda Agenti e confermare che l'agente sia online.

  2. Se l'agente è offline, accedere al computer Linux in cui è installato l'agente e passare alla directory di installazione dell'agente.

  3. Avviare l'agente in modo interattivo:

    ./run.sh
    

L'agente viene eseguito in primo piano. Mantenere aperta questa sessione del terminale mentre è in corso la migrazione.

Facoltativo: configurazione di produzione: eseguire l'agente come servizio

Per le migrazioni a esecuzione prolungata, configurare l'agente per l'esecuzione come servizio di sistema in modo che possa essere riavviato se il computer viene riavviato o la connessione si interrompe.

  1. Per eseguire l'agente come servizio in modo che rimanga online tra i riavvii:

    sudo ./svc.sh install
    sudo ./svc.sh start
    

Quando usare ogni modalità:

  • Usare la modalità servizio per le migrazioni che richiedono più di due ore, migrazioni durante gli orari di minore attività o scenari in cui il computer potrebbe essere riavviato o la connessione potrebbe essere interrotta.
  • Usare la modalità interattiva per le migrazioni rapide (meno di 30 minuti), le migrazioni a cui si monitora lo stato di avanzamento o gli ambienti in cui i servizi di sistema richiedono un'approvazione aggiuntiva.
  • La modalità agente non influisce sulla velocità di sincronizzazione. Sia che si esegua ./run.sh o sudo ./svc.sh start, la velocità di migrazione e la velocità di trasferimento dei dati sono uguali.

Per altre informazioni, vedi Eseguire un agente ospitato autonomamente in Linux.

Risoluzione dei problemi di avvio dell'agente

Se l'agente non viene avviato o rimane offline dopo l'esecuzione ./run.sh, controllare gli elementi seguenti:

  • Autorizzazioni: assicurarsi che la directory dell'agente disponga delle autorizzazioni di esecuzione (chmod +x run.sh) e che l'utente abbia accesso in scrittura alla directory.
  • Conflitto di porte: verificare che la porta del listener dell'agente non sia usata da un altro processo (netstat -an | grep <agent-port>).
  • Rete: Verificare che il computer dell'agente possa raggiungere dev.azure.com e gli endpoint GitHub necessari.
  • Errore di avvio del servizio: se si usa sudo ./svc.sh start, esaminare i log del servizio tramite journalctl -u vstsagent.<org>-<project>-<agent-name>.service.

Scegliere il percorso di migrazione

Prima di iniziare la migrazione, scegliere il percorso operativo:

  • Spostarsi completamente in GitHub e interrompere l'uso di Azure DevOps per il controllo del codice sorgente.
  • Usare un modello ibrido e spostare il codice sorgente per GitHub continuando a usare Azure DevOps per le pipeline e/o le schede.

Per la modalità ibrida, stabilire se ELM riconfigura Azure Pipelines e crea la connessione ad Azure Boards oppure se il team si occupa separatamente di tali aggiornamenti.

Decidere anche se convalidare prima e avviare la sincronizzazione entro 24 ore o consentire a ELM di avviare automaticamente la sincronizzazione dopo che la convalida ha esito positivo.

Avviare la sincronizzazione

Iniziare con questo comando di base per ogni migrazione:

az devops migrations create --org https://dev.azure.com/<org>
                            --repository-id <repo-guid>
                            --target-repository https://github.com/<org>/<repo>
                            --github-token <github-pat>
                            --service-endpoint-id <service-connection-guid>
                            --agent-pool <agent-pool-name>

In --target-repository, <repo> è il nome del repository GitHub. Scegliere qualsiasi nome disponibile. Non è necessario che corrisponda al nome del repository Azure DevOps.

Aggiungere parametri facoltativi in base al proprio scenario di migrazione:

Scenario Aggiungere questo parametro Result
Convalida prima della sincronizzazione --validate-only ELM esegue solo la validazione. È necessario avviare la sincronizzazione all'interno della finestra di convalida di 24 ore.
Avviare automaticamente la sincronizzazione dopo la convalida Nessun parametro aggiuntivo ELM convalida prima, quindi avvia automaticamente la sincronizzazione se la convalida ha esito positivo.
Scoprire e riconfigurare automaticamente le pipeline --enable-auto-discover-pipelines e --pipeline-service-connection-id <service-connection-id> ELM trova pipeline che fanno riferimento al repository di origine e le ricollega a GitHub.
Scegliere manualmente le pipeline da riconfigurare successivamente --pipeline-service-connection-id <service-connection-id> ELM prepara la migrazione per la riconfigurazione manuale della pipeline dopo l'avvio della sincronizzazione.
Non usare ELM per il riwiring della pipeline Omettere entrambi i parametri di riconfigurazione della pipeline ELM esegue la migrazione solo del repository. È possibile aggiornare le pipeline separatamente.

Controllare lo stato della migrazione:

az devops migrations status --org https://dev.azure.com/<org>
                            --repository-id <repo-guid>

Cerca:

  • status- Stato della migrazione corrente (Active, Succeeded, CompletedFailed, , Suspended)
  • stage- Fase di migrazione corrente (Queued, Validation, SynchronizationCutover, ReviewForCutover, ReadyForCutover, , ) Migrated
  • validationIssues - elenco di errori di controllo preliminare con codici di errore e messaggi
  • errorMessage - dettagli sull'errore

Convalida prima della sincronizzazione

Usare questo flusso se è stata avviata la migrazione con --validate-only o se è stata selezionata Esegui convalida ed eseguirla in un secondo momento.

  1. Avviare la sincronizzazione entro 24 ore dopo che la convalida ha esito positivo:

    az devops migrations resume --org https://dev.azure.com/<org>
                                --repository-id <repo-guid>
                                --migration
    
  2. Ricontrollare lo stato:

    az devops migrations status --org https://dev.azure.com/<org>
                                --repository-id <repo-guid>
    

Riconfigurazione manuale della pipeline (modalità ibrida)

Usa questo flusso di lavoro quando scegli di ricollegare manualmente le pipeline.

Note

I comandi az devops migrations pipelines (list, submit, update, retry e delete) sono in anteprima.

  1. Trova gli ID delle definizioni della pipeline che fanno riferimento al repository in fase di migrazione.

    az devops migrations pipelines list riporta solo le pipeline già incluse nel processo di riconfigurazione e il relativo stato di riconfigurazione. Prima di inviare le pipeline, restituisce un risultato vuoto, quindi non è possibile usarlo per individuare le pipeline candidate. Per trovare gli ID di definizione da ricollegare, elencare le pipeline che vengono compilate a partire dal repository di origine:

    az pipelines list --org $org \
                      --project $project \
                      --repository $rid \
                      --repository-type tfsgit \
                      --query "[].{id:id, name:name}" -o table
    

    Usare i valori id dell'output come --pipeline-ids nel passaggio seguente.

    Note

    az pipelines list --repository restituisce solo le pipeline il cui repository di trigger predefinito è il repository di origine. Una pipeline che fa riferimento al repository tramite una risorsa, un modello o un passaggio di checkout (anziché come repository principale) potrebbe non essere visualizzata qui. Includi anche questi ID di definizione se sai che dipendono dal repository in fase di migrazione.

  2. Inviare gli ID delle definizioni di pipeline selezionate per la riconfigurazione (massimo 200 ID per richiesta):

    az devops migrations pipelines submit --org $org \
                                         --repository-id $rid \
                                         --pipeline-ids 42 43 44 \
                                         --service-connection-id $scid
    

    --service-connection-id è facoltativo se hai già collegato una connessione tramite --pipeline-service-connection-id in migrations create o in un pipelines update --service-connection-id precedente.

  3. Se una pipeline fa riferimento ad altri repository, eseguire il mapping di ogni repository di origine alla destinazione GitHub:

    az devops migrations pipelines submit --org $org \
                                         --repository-id $rid \
                                         --pipeline-ids 42 43 44 \
                                         --service-connection-id $scid \
                                         --repository-mapping aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa=<GH_ORG>/shared-templates \
                                         --repository-mapping bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb=<GH_ORG>/another-repo
    

    Formato: --repository-mapping <sourceRepoId>=<targetOwner>/<targetRepo> (ripetibile).

  4. Monitorare e regolare il set di pipeline:

    az devops migrations pipelines list --org $org --repository-id $rid -o table
    

    Dopo aver inviato le pipeline, questo comando elenca ciascuna pipeline registrata e il relativo stato di riconfigurazione:

    Column Meaning
    DefinitionId ID definizione della pipeline
    Name Nome della pipeline (se il nome della pipeline non è ancora disponibile, viene usato il nome del file YAML)
    Classification In che modo la pipeline fa riferimento al repository
    Status Stato attuale del ricablaggio della pipeline
    ErrorMessage Dettagli dell'errore quando la pipeline si trova in uno stato di errore
    az devops migrations pipelines update --org $org \
                                         --repository-id $rid \
                                         --add-ids 50 51 \
                                         --remove-ids 42 \
                                         --retry-ids 43 \
                                         --service-connection-id $scid
    
    • --add-ids: aggiungere altre pipeline.
    • --remove-ids: rimuovere le pipeline dalla riconfigurazione.
    • --retry-ids: ripetere le pipeline in stato Failed.
    • È necessario almeno uno di --add-ids, --remove-ids--retry-ids, --service-connection-id, o --repository-mapping .

    Collegamento di sola ripetizione:

    az devops migrations pipelines retry --org $org --repository-id $rid --pipeline-ids 43
    
  5. Rivedere e approvare durante il cutover quando la fase è ReviewForCutover:

    az devops migrations cutover review --org $org --repository-id $rid -o table
    

    Esaminare i campi chiave:

    Campo Meaning
    FailedCount / BlockedCount / PendingCount / TotalUnprocessedCount Numero di elementi non elaborati (non riusciti, bloccati, in sospeso e totale)
    RequiresPipelineVerification (requiresPipelineVerificationAcknowledgment) Se true, l'approvazione deve includere --pipelines-verified
    State / Type / PullRequestUrl (da failedItems[]) Dettagli sugli errori per elemento
  6. Approva il passaggio:

    az devops migrations cutover approve --org $org \
                                        --repository-id $rid \
                                        --pipelines-verified
    

    Se si accettano anche elementi non elaborati:

    az devops migrations cutover approve --org $org \
                                        --repository-id $rid \
                                        --accept-failures 3 \
                                        --pipelines-verified
    

    È necessario specificare almeno uno di --accept-failures o --pipelines-verified.

Durante la sincronizzazione iniziale:

  • Azure DevOps rimane completamente scrivibile. I team continuano a lavorare normalmente.
  • GitHub non è ancora il sistema di riferimento.
  • Il repository GitHub di destinazione viene impostato automaticamente su privato.

Importante

Dopo aver avviato una migrazione completa, è necessario completare il cutover entro 21 giorni. L'orologio inizia all'avvio della sincronizzazione iniziale.

Passo successivo