Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Riferimento al modello di integrazione
Esistono diverse integrazioni predefinite per servizi di terze parti che aiutano a integrare gli strumenti esistenti per i clienti nel processo di rilascio della pipeline. I partner o i fornitori di servizi terzi utilizzano un modello di integrazione per implementare i tipi di azioni da utilizzare in. CodePipeline
Utilizza questo riferimento quando pianifichi o lavori con tipi di azioni gestiti con un modello di integrazione supportato in CodePipeline.
Per certificare il tipo di azione di terze parti come partner di integrazione con CodePipeline, fai riferimento al AWS Partner Network (APN). Queste informazioni sono un supplemento al AWS CLI Reference.
Argomenti
Come funzionano i tipi di azioni di terze parti con l'integratore
Puoi aggiungere tipi di azioni di terze parti alle pipeline dei clienti per completare attività sulle risorse dei clienti. L'integratore gestisce le richieste di lavoro ed esegue l'azione con. CodePipeline Il diagramma seguente mostra un tipo di azione di terze parti creato per essere utilizzato dai clienti nella loro pipeline. Dopo che il cliente ha configurato l'azione, l'azione viene eseguita e crea richieste di lavoro che vengono gestite dal motore di azione dell'integratore.
Il diagramma mostra i seguenti passaggi:
-
La definizione dell'azione viene registrata e resa disponibile in CodePipeline. L'azione di terze parti è disponibile per i clienti del fornitore terzo.
-
Il cliente del provider sceglie e configura l'azione in. CodePipeline
-
L'azione viene eseguita e i lavori vengono messi in coda. CodePipeline Quando il lavoro è pronto CodePipeline, invia una richiesta di lavoro.
-
L'integratore (il job worker per i sondaggi di terze parti o APIs la funzione Lambda) raccoglie la richiesta di lavoro, restituisce una conferma e lavora sugli artefatti delle azioni.
-
L'integratore restituisce l'output di successo/fallimento (il job worker utilizza successo/fallimento APIs o la funzione Lambda invia l'output di successo/fallimento) con un risultato del lavoro e un token di continuazione.
Per informazioni sui passaggi che è possibile utilizzare per richiedere, visualizzare e aggiornare un tipo di azione, vedere. Lavorare con i tipi di azione
Concetti
Questa sezione utilizza i seguenti termini per i tipi di azioni di terze parti:
- Tipo di operazione
-
Un processo ripetibile che può essere riutilizzato in pipeline che eseguono gli stessi carichi di lavoro di distribuzione continua. I tipi di azione sono identificati da un
Owner
,, eCategory
.Provider
Version
Per esempio:{ "Category": "Deploy", "Owner": "AWS", "Provider": "CodeDeploy", "Version": "1" },
Tutte le azioni dello stesso tipo condividono la stessa implementazione.
- Azione
-
Una singola istanza di un tipo di azione, uno dei processi discreti che avvengono all'interno di una fase di una pipeline. Ciò include in genere i valori utente specifici della pipeline in cui viene eseguita l'azione.
- Definizione dell'azione
-
Lo schema per un tipo di azione che definisce le proprietà richieste per configurare l'azione e gli artefatti di input/output.
- Esecuzione dell'operazione
-
Una raccolta di lavori che sono stati eseguiti per determinare se l'azione sulla pipeline del cliente ha avuto successo o meno.
- Motore di esecuzione delle azioni
-
Una proprietà della configurazione di esecuzione dell'azione che definisce il tipo di integrazione utilizzato da un tipo di azione. I valori validi sono
JobWorker
eLambda
. - Integrazione
-
Descrive un software eseguito da un integratore per implementare un tipo di azione. CodePipeline supporta due tipi di integrazione corrispondenti ai due motori
JobWorker
di azione supportati e.Lambda
- Integratore
-
La persona che possiede l'implementazione di un tipo di azione.
- Processo
-
Un lavoro con pipeline e contesto del cliente per eseguire un'integrazione. L'esecuzione di un'azione è composta da uno o più lavori.
- Job worker
-
Il servizio che elabora l'input del cliente e gestisce un lavoro.
Modelli di integrazione supportati
CodePipeline dispone di due modelli di integrazione:
-
Modello di integrazione Lambda: questo modello di integrazione è il modo preferito per lavorare con i tipi di azione. CodePipeline Il modello di integrazione Lambda utilizza una funzione Lambda per elaborare le richieste di lavoro durante l'esecuzione dell'azione.
-
Modello di integrazione Job Worker: Il modello di integrazione Job Worker è il modello utilizzato in precedenza per le integrazioni di terze parti. Il modello di integrazione dei job worker utilizza un job worker configurato per contattarlo per CodePipeline APIs elaborare le richieste di lavoro al momento dell'esecuzione dell'azione.
A titolo di confronto, la tabella seguente descrive le caratteristiche dei due modelli:
Modello di integrazione Lambda | Modello di integrazione Job Worker | |
---|---|---|
Descrizione | L'integratore scrive l'integrazione come funzione Lambda, che viene richiamata CodePipeline ogni volta che è disponibile un lavoro per l'azione. La funzione Lambda non esegue un sondaggio per i lavori disponibili, ma attende la ricezione della richiesta di lavoro successiva. | L'integratore scrive l'integrazione come job worker che analizza costantemente i posti di lavoro disponibili nelle pipeline del cliente. Il job worker esegue quindi il lavoro e invia il risultato del lavoro a utilizzando. CodePipeline CodePipeline APIs |
Infrastruttura | AWS Lambda | Implementa il codice Job Worker nell'infrastruttura dell'integratore, come le istanze Amazon. EC2 |
Impegno di sviluppo | L'integrazione contiene solo la logica aziendale. | L'integrazione deve interagire con, oltre CodePipeline APIs a contenere, la logica aziendale. |
Operazioni e sforzi | Minore impegno operativo poiché l'infrastruttura è costituita solo da AWS risorse. | Maggiore impegno operativo perché il lavoratore necessita di un hardware autonomo. |
Durata massima di esecuzione del Job | Se l'integrazione deve essere eseguita attivamente per più di 15 minuti, questo modello non può essere utilizzato. Questa azione è destinata agli integratori che devono avviare un processo (ad esempio, avviare una build sull'elemento di codice del cliente) e restituire un risultato al termine. Non è consigliabile che l'integratore continui ad aspettare il completamento della build. Invece, restituisci una continuazione. CodePipelinecrea un nuovo lavoro in altri 30 secondi se viene ricevuta una continuazione dal codice dell'integratore per controllare il lavoro fino al termine. | Utilizzando questo modello è possibile sostenere lavori di esecuzione molto lunga (ore/giorni). |
Modello di integrazione Lambda
Il modello di integrazione Lambda supportato include la creazione della funzione Lambda e la definizione dell'output per il tipo di azione di terze parti.
Aggiorna la tua funzione Lambda per gestire l'input da CodePipeline
È possibile creare una nuova funzione Lambda. Puoi aggiungere una logica aziendale alla tua funzione Lambda che viene eseguita ogni volta che c'è un lavoro disponibile nella pipeline per il tuo tipo di azione. Ad esempio, dato il contesto del cliente e della pipeline, potresti voler iniziare a integrare il tuo servizio per il cliente.
Usa i seguenti parametri per aggiornare la funzione Lambda per gestire l'input da. CodePipeline
Formato:
-
jobId
:-
L'ID univoco del lavoro generato dal sistema.
-
Tipo: stringa
-
Schema: [0-9a-f] {8} - [0-9a-f] {4} - [0-9a-f] {4} - [0-9a-f] {4} - [0-9a-f] {12}
-
-
accountId
:-
L'ID AWS dell'account del cliente da utilizzare durante l'esecuzione del lavoro.
-
Tipo: stringa
-
Modello: [0-9] {12}
-
-
data
:-
Altre informazioni su un processo utilizzato da un'integrazione per completare il lavoro.
-
Contiene una mappa di quanto segue:
-
actionConfiguration
:-
I dati di configurazione per l'azione. I campi di configurazione dell'azione sono una mappatura di coppie chiave-valore per consentire al cliente di inserire valori. Le chiavi sono determinate dai parametri chiave nel file di definizione del tipo di azione al momento della configurazione dell'azione. In questo esempio, i valori sono determinati dall'utente dell'azione specificando le informazioni nei
Password
campiUsername
and. -
Tipo: mappa da stringa a stringa, facoltativamente presente
Esempio:
"configuration": { "Username": "MyUser", "Password": "MyPassword" },
-
-
encryptionKey
:-
Rappresenta le informazioni sulla chiave utilizzata per crittografare i dati nell'archivio degli artefatti, ad esempio una chiave. AWS KMS
-
Contenuto: Tipo di tipo di dati, presente opzionalmente
encryptionKey
-
-
inputArtifacts
:-
Elenco di informazioni su un artefatto su cui lavorare, ad esempio un artefatto di test o di costruzione.
-
Contenuto: Elenco del tipo di dati, presente opzionalmente
Artifact
-
-
outputArtifacts
:-
Elenco di informazioni sull'output di un'azione.
-
Contenuto: Elenco del tipo di dati
Artifact
, presente opzionalmente
-
-
actionCredentials
:-
Rappresenta un oggetto di credenziali di AWS sessione. Queste credenziali sono credenziali temporanee emesse da. AWS STS Possono essere utilizzate per accedere agli artefatti di input e output nel bucket S3 utilizzato per archiviare gli artefatti per la pipeline. CodePipeline
Queste credenziali dispongono inoltre delle stesse autorizzazioni del modello di istruzioni politiche specificato nel file di definizione del tipo di azione.
-
Contenuto: tipo di dati
AWSSessionCredentials
, facoltativamente presente
-
-
actionExecutionId
:-
L'ID esterno dell'esecuzione dell'azione.
-
Tipo: stringa
-
-
continuationToken
:-
Un token generato dal sistema, ad esempio un ID di distribuzione, richiesto da un processo per continuare il lavoro in modo asincrono.
-
Tipo: stringa, facoltativamente presente
-
-
-
Tipi di dati:
-
encryptionKey
:-
id
:-
ID utilizzato per identificare la chiave. Per ogni AWS KMS chiave, puoi usare l'ID della chiave, la chiave ARN o l'aliasARN.
-
Tipo: stringa
-
-
type
:-
Il tipo di chiave di crittografia, ad esempio una AWS KMS chiave.
-
Tipo: stringa
-
Valori validi:
KMS
-
-
-
Artifact
:-
name
:-
Il nome dell'artefatto.
-
Tipo: String, facoltativamente presente
-
-
revision
:-
L'ID di revisione dell'artefatto. A seconda del tipo di oggetto, potrebbe essere un ID di commit (GitHub) o un ID di revisione (Amazon S3).
-
Tipo: stringa, presente opzionalmente
-
-
location
:-
La posizione di un artefatto.
-
Contenuto: Tipo di tipo di dati
ArtifactLocation
, facoltativamente presente
-
-
-
ArtifactLocation
:-
type
:-
Il tipo di artefatto presente nel luogo.
-
Tipo: stringa, facoltativamente presente
-
Valori validi:
S3
-
-
s3Location
:-
La posizione del bucket S3 che contiene una revisione.
-
Contenuto: Tipo di tipo di dati, facoltativamente presente
S3Location
-
-
-
S3Location
:-
bucketName
:-
Nome del bucket S3.
-
Tipo: stringa
-
-
objectKey
:-
La chiave dell'oggetto nel bucket S3, che identifica in modo univoco l'oggetto nel bucket.
-
Tipo: stringa
-
-
-
AWSSessionCredentials
:-
accessKeyId
:-
La chiave di accesso per la sessione.
-
Tipo: stringa
-
-
secretAccessKey
:-
La chiave di accesso segreta per la sessione.
-
Tipo: stringa
-
-
sessionToken
:-
Il token per la sessione.
-
Tipo: stringa
-
-
Esempio:
{ "jobId": "
01234567-abcd-abcd-abcd-012345678910
", "accountId": "012345678910
", "data": { "actionConfiguration": { "key1": "value1
", "key2": "value2
" }, "encryptionKey": { "id": "123-abc
", "type": "KMS
" }, "inputArtifacts": [ { "name": "input-art-name
", "location": { "type": "S3
", "s3Location": { "bucketName": "inputBucket
", "objectKey": "inputKey
" } } } ], "outputArtifacts": [ { "name": "output-art-name
", "location": { "type": "S3
", "s3Location": { "bucketName": "outputBucket
", "objectKey": "outputKey
" } } } ], "actionExecutionId": "actionExecutionId
", "actionCredentials": { "accessKeyId": "access-id
", "secretAccessKey": "secret-id
", "sessionToken": "session-id
" }, "continuationToken": "continueId-xxyyzz
" } }
Restituisci i risultati della tua funzione Lambda a CodePipeline
La risorsa job worker dell'integratore deve restituire un payload valido in caso di successo, fallimento o continuazione.
Formato:
-
result
: Il risultato del lavoro.-
Richiesto
-
Valori validi (senza distinzione tra maiuscole e minuscole):
-
Success
: indica che un lavoro è terminato con successo. -
Continue
: Indica che un lavoro ha esito positivo e deve continuare, ad esempio se il job worker viene nuovamente richiamato per l'esecuzione della stessa azione. -
Fail
: Indica che un lavoro non è riuscito ed è terminale.
-
-
-
failureType
: tipo di errore da associare a un processo non riuscito.La
failureType
categoria relativa alle azioni dei partner descrive il tipo di errore riscontrato durante l'esecuzione del processo. Gli integratori impostano il tipo insieme al messaggio di errore quando restituiscono il risultato di un errore di lavoro a. CodePipeline-
Facoltativo. Obbligatorio se il risultato è.
Fail
-
Deve essere nullo se
result
èSuccess
oContinue
-
Valori validi:
-
ConfigurationError
-
JobFailed
-
PermissionsError
-
RevisionOutOfSync
-
RevisionUnavailable
-
SystemUnavailable
-
-
-
continuation
: stato di continuazione da passare al processo successivo nell'ambito dell'esecuzione dell'azione corrente.-
Facoltativo. Obbligatorio se il risultato è
Continue
. -
Deve essere nullo se
result
èSuccess
oFail
. -
Proprietà:
-
State
: Un hash dello stato da passare.
-
-
-
status
: Stato dell'esecuzione dell'azione.-
Facoltativo.
-
Proprietà:
-
ExternalExecutionId
: un ID di esecuzione esterno o un ID di commit opzionale da associare al job. -
Summary
: un riepilogo facoltativo di ciò che è accaduto. Negli scenari di errore, questo diventa il messaggio di errore visualizzato dall'utente.
-
-
-
outputVariables
: Un insieme di coppie chiave/valore da passare alla successiva esecuzione dell'azione.-
Facoltativo.
-
Deve essere nullo se
result
è o.Continue
Fail
-
Esempio:
{ "result":
"success"
, "failureType": null, "continuation": null, "status": { "externalExecutionId":"my-commit-id-123"
, "summary":"everything is dandy"
}, "outputVariables": { "FirstOne":"Nice"
, "SecondOne":"Nicest"
, ... } }
Utilizza i token di continuazione per attendere i risultati di un processo asincrono
Il continuation
token fa parte del payload e il risultato della funzione Lambda. È un modo per passare lo stato del lavoro a CodePipeline e indicare che il lavoro deve essere continuato. Ad esempio, dopo che un integratore ha avviato una build per il cliente sulla propria risorsa, non attende il completamento della build, ma indica CodePipeline che non ha un risultato terminale restituendo result
as continue
e restituendo l'ID univoco della build al CodePipeline token as. continuation
Nota
Le funzioni Lambda possono essere eseguite solo fino a 15 minuti. Se il processo deve durare più a lungo, puoi utilizzare i token di continuazione.
Il CodePipeline team richiama l'integratore dopo 30 secondi con lo stesso continuation
token nel payload in modo che possa verificarne il completamento. Se la build viene completata, l'integratore restituisce il risultato di successo/fallimento del terminale, altrimenti continua.
Fornisci CodePipeline le autorizzazioni per richiamare la funzione Lambda dell'integratore in fase di esecuzione
Aggiungi le autorizzazioni alla funzione Lambda dell'integratore per fornire al servizio CodePipeline le autorizzazioni per richiamarlo utilizzando il service principal:. CodePipeline codepipeline.amazonaws.com
È possibile aggiungere le autorizzazioni utilizzando o la riga di comando. AWS CloudFormation Per vedere un esempio, consulta Lavorare con i tipi di azione.
Modello di integrazione Job Worker
Dopo aver progettato il flusso di lavoro di alto livello, puoi creare il tuo job worker. Sebbene le specifiche dell'azione di terze parti determinino ciò che è necessario per il lavoratore, la maggior parte dei job worker per le azioni di terze parti include le seguenti funzionalità:
-
Sondaggio dei lavori relativi all'utilizzo. CodePipeline
PollForThirdPartyJobs
-
Riconoscimento delle offerte di lavoro e restituzione dei risultati all' CodePipeline utilizzo di
AcknowledgeThirdPartyJob
PutThirdPartyJobSuccessResult
, e.PutThirdPartyJobFailureResult
-
Recupero e/o inserimento di artefatti nel bucket Amazon S3 per la pipeline. Per scaricare elementi dal bucket Amazon S3, devi creare un client Amazon S3 che utilizzi la firma Signature Version 4 (Sig V4). Sig V4 è richiesto per. AWS KMS
Per caricare artefatti nel bucket Amazon S3, devi anche configurare la richiesta Amazon S3 per utilizzare la crittografia tramite (
PutObject
). AWS Key Management Service AWS KMS AWS KMS usi. AWS KMS keys Per sapere se utilizzare la chiave gestita dal cliente Chiave gestita da AWS o una chiave gestita dal cliente per caricare gli artefatti, il lavoratore deve esaminare i dati del lavoro e verificare la proprietà della chiave di crittografia. Se la proprietà è impostata, è necessario utilizzare l'ID della chiave gestita dal cliente durante la configurazione. AWS KMS Se la proprietà della chiave è nulla, si utilizza la. Chiave gestita da AWS CodePipeline utilizza il, Chiave gestita da AWS a meno che non sia configurato diversamente.Per un esempio che mostra come creare i AWS KMS parametri in Java o. NET, vedi Specificare AWS Key Management Service in Amazon S3 utilizzando il. AWS SDKs Per ulteriori informazioni sul bucket Amazon S3 per CodePipeline, consulta. CodePipeline concetti
Scelta e configurazione di una strategia di gestione delle autorizzazioni per l'esecutore del processo
Per sviluppare un job worker su cui affidare l'intervento di terzi CodePipeline, è necessaria una strategia per l'integrazione della gestione degli utenti e delle autorizzazioni.
La strategia più semplice consiste nell'aggiungere l'infrastruttura di cui hai bisogno per il tuo job worker creando EC2 istanze Amazon con un ruolo di istanza AWS Identity and Access Management (IAM), che ti consentano di scalare facilmente le risorse necessarie per la tua integrazione. Puoi utilizzare l'integrazione integrata con AWS per semplificare l'interazione tra il tuo job worker e CodePipeline.
Scopri di più su Amazon EC2 e scopri se è la scelta giusta per la tua integrazione. Per informazioni, consulta Amazon EC2 - Virtual Server Hosting
Un'altra strategia da prendere in considerazione consiste nell'utilizzare la federazione delle identità IAM per integrare il sistema e le risorse esistenti del provider di identità. Questa strategia è utile se disponi già di un provider di identità aziendale o se sei già configurato per supportare gli utenti che utilizzano provider di identità Web. La federazione delle identità consente di concedere un accesso sicuro alle AWS risorse CodePipeline, anche senza dover creare o gestire IAM gli utenti. Puoi utilizzare le caratteristiche e le policy per requisiti di sicurezza delle password e rotazione delle credenziali. Puoi utilizzare applicazioni di esempio come modelli per il tuo progetto. Per informazioni, consulta Gestione della federazione
Per fornire l'accesso, aggiungi autorizzazioni ai tuoi utenti, gruppi o ruoli:
-
Utenti e gruppi in AWS IAM Identity Center:
Crea un set di autorizzazioni. Segui le istruzioni riportate nella pagina Create a permission set (Creazione di un set di autorizzazioni) nella Guida per l'utente di AWS IAM Identity Center .
-
Utenti gestiti IAM tramite un provider di identità:
Crea un ruolo per la federazione delle identità. Segui le istruzioni riportate in Creazione di un ruolo per un provider di identità di terze parti (federazione) nella Guida per l'IAMutente.
-
IAMutenti:
-
Crea un ruolo che l'utente possa assumere. Segui le istruzioni riportate nella sezione Creazione di un ruolo per un IAM utente nella Guida per l'IAMutente.
-
(Non consigliato) Collega una policy direttamente a un utente o aggiungi un utente a un gruppo di utenti. Segui le istruzioni riportate in Aggiungere autorizzazioni a un utente (console) nella Guida per l'IAMutente.
-
Di seguito è riportato un esempio di politica che potresti creare per l'utilizzo con il tuo collaboratore esterno. Questa policy è intesa solo come un esempio ed è fornita senza modifiche.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codepipeline:PollForThirdPartyJobs", "codepipeline:AcknowledgeThirdPartyJob", "codepipeline:GetThirdPartyJobDetails", "codepipeline:PutThirdPartyJobSuccessResult", "codepipeline:PutThirdPartyJobFailureResult" ], "Resource": [ "arn:aws:codepipeline:
us-east-2
::actionType:ThirdParty/Build/Provider
/1/" ] } ] }