Skip to content

Commit e896559

Browse files
feat: WIP
1 parent 284acce commit e896559

5 files changed

Lines changed: 25 additions & 21 deletions

File tree

README.md

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ Gleichzeitig starten im Jenkins automatisch Build-Prozesse, die die vier Service
2121

2222
Schaue im Jenkins nach, ob alle Pipelines durchgelaufen sind.
2323

24-
Wenn die vier Services deployed sind, kann die Swagger-UI des Customer Services auf dem Testsystem
24+
Wenn die vier Services deployt sind, kann die Swagger-UI des Customer Services auf dem Testsystem
2525
über folgende URL erreicht werden: [Customer-Service](http://localhost:8281)
2626

2727
## Übung 1 - Verwendung des Pact-Brokers
@@ -30,7 +30,7 @@ Der Pact Broker ist bisher (außer eines Sample Contracts) leer.
3030

3131
Wir wollen jetzt, dass die Services ihre Contracts via Pact austauschen.
3232
Dazu muss in allen vier Services der Branch `pact-broker`
33-
in den Branch `develop` gemerged werden.
33+
in den Branch `develop` gemergt werden.
3434
Gehe auf den Git-Server und erstelle zunächst im `customer-service`
3535
einen Pull-Request mit dem Base-Branch `develop`
3636
und dem Vergleichs-Branch `pact-broker` und führe diese dann zusammen.
@@ -47,7 +47,7 @@ Dazu erstellen wir wieder, wie oben beschrieben, einen Pull-Request
4747
und führen ihn zusammen.
4848

4949
Nachdem wir beobachtet haben, dass der Billing Service gebaut
50-
und deployed wurde, können wir im Pact Broker sehen,
50+
und deployt wurde, können wir im Pact Broker sehen,
5151
dass der Billing Service den Contract des Customer Services verifiziert hat.
5252

5353
Wir mergen nun analog den Delivery Service und beobachten auch hier,
@@ -63,7 +63,7 @@ und beobachten auch hier die Verifizierung.
6363

6464
## Übung 2 - Nur deployen, wenn der Branch verifiziert ist.
6565

66-
Es wäre wünschenswert, dass ein Service nur deployed wird,
66+
Es wäre wünschenswert, dass ein Service nur deployt wird,
6767
wenn seine Contracts auch von den jeweiligen Providern verifiziert wurden.
6868
Um das zu erreichen, müssen wir die Pipelines so umbauen,
6969
dass die Consumer die Pipelines der Provider immer dann antriggern,
@@ -90,22 +90,22 @@ als auch der Build des Delivery Services angestoßen wird.
9090
Um sicherzustellen, dass alle Versionen einer Stage zusammenpassen,
9191
gibt es in Pact das Konzept der Tags.
9292

93-
Sobald ein Service in einer Version auf einer Stage deployed worden ist,
93+
Sobald ein Service in einer Version auf einer Stage deployt worden ist,
9494
kann diese Version im Pact-Broker mit einem Tag der Stage versehen werden.
9595

96-
Wir können das sehen, indem wir sowowhl im Address-Validation Service
96+
Wir können das sehen, indem wir sowohl im Address-Validation Service
9797
als auch im Billing Service jeweils den Branch `pact-tags` in den Branch `develop` mergen.
98-
Nach erfolgreichem Deployment sind die jeweiligen Versionen im Pact Broker getagged.
98+
Nach erfolgreichem Deployment sind die jeweiligen Versionen im Pact Broker getaggt.
9999

100100
Wenn wir nun im Delivery Service den Branch `pact-tags` in `develop` mergen,
101101
können wir beobachten, dass der Address-Validation Service beim Verifizieren
102-
des Contracts die Version verwendet, die auch auf der Stage deployed ist,
102+
des Contracts die Version verwendet, die auch auf der Stage deployt ist,
103103
auf die der Delivery Service deployen möchte (in diesem Fall die Test-Stage).
104104
Um zu signalisieren, dass die gerade getestete Version des Delivery Services
105-
noch nicht auf der Stage vorhanden ist, aber auf die Stage deployed werden soll,
106-
tagged der Delivery Service seinen Contract zunächst mit `pending-test`.
107-
Der Address Validation Service validiert dann alle Contracts, die mit `pending-test` getagged sind.
108-
Nach erfolgreichem Deployment des Delivery Services, tagged dieser den Contract
105+
noch nicht auf der Stage vorhanden ist, aber auf die Stage deployt werden soll,
106+
taggt der Delivery Service seinen Contract zunächst mit `pending-test`.
107+
Der Address Validation Service validiert dann alle Contracts, die mit `pending-test` getaggt sind.
108+
Nach erfolgreichem Deployment des Delivery Services, taggt dieser den Contract
109109
mit dem Tag `test`.
110110

111111
Dasselbe können wir erneut beim Customer Service beobachten,
@@ -121,19 +121,23 @@ sogar auf unterschiedlichen Build-Servern laufen,
121121
werden andere Mechanismen benötigt, um die Verifikation von Contracts anzustoßen.
122122

123123
Der Pact Broker bietet hierzu die Möglichkeit,
124-
zwei Arten von Web-Hooks zu registrieren.
124+
zwei Arten von Webhooks zu registrieren.
125125
Einerseits kann man einen Webhook registrieren,
126126
der aufgerufen wird, wenn ein Contract hochgeladen wird.
127-
Diesen werden wir dazu verwenden, die Verifikation anzustoßen.
127+
Andererseits kann man einen Webhook registrieren,
128+
der aufgerufen wird, wenn ein Contract verifiziert
129+
und das Ergebnis hochgeladen wurde.
130+
Ersteren werden wir verwenden, um die Verifikation anzustoßen.
128131

129132
Wir können die Webhooks registrieren, indem wir im Pact-Broker rechts oben
130133
auf den `API Browser` gehen.
131134
Dort suchen wir die Ressource `pb:webhooks` und klicken auf `Perform non-GET request`.
132135
Das ist das gelb unterlegte `!`.
133136

134-
Insgesamt wollen wir fünf Webhooks anlegen: Drei zum Antriggern der Verifikation
137+
Insgesamt wollen wir fünf Webhooks anlegen:
138+
zunächst einmal drei zum Antriggern der Verifikation
135139
(nämlich für den Billing Service, den Delivery Service und den Address Validation Service).
136-
Dafür führen wir drei POST-Requests aus mit den folgenden Bodys:
140+
Dazu führen wir drei POST-Requests mit den folgenden Bodys aus:
137141

138142
```
139143
{
@@ -214,7 +218,7 @@ Dafür führen wir drei POST-Requests aus mit den folgenden Bodys:
214218
```
215219

216220
Außerdem legen wir mit weiteren POST-Requests noch zwei Webhooks an, die getriggert werden, wenn eine Verifikation erfolgreich war
217-
und der Service auf die Stage deployen kann. Diese brauchen wir für den Customer Service und den Delivery Service:
221+
und der Service auf die Stage deployen kann. Diese brauchen wir für den Customer Service und den Delivery Service.
218222

219223
```
220224
{

address-validation-service/Jenkinsfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ pipeline {
1616
PERFORM_RELEASE = "${env.SNAPSHOT_VERSION.contains('-SNAPSHOT') && env.BRANCH_NAME == 'main' && !env.LAST_COMMIT_MESSAGE.startsWith('update version to ')}"
1717
RELEASE_VERSION = "${env.SNAPSHOT_VERSION.contains('-SNAPSHOT') ? env.SNAPSHOT_VERSION.substring(0, env.SNAPSHOT_VERSION.lastIndexOf('-SNAPSHOT')) : SNAPSHOT_VERSION}"
1818
VERSION = "${env.BRANCH_NAME == 'main' && !env.LAST_COMMIT_MESSAGE.startsWith('update version to ') ? env.RELEASE_VERSION : env.SNAPSHOT_VERSION}"
19-
PACT_VERSION = "${env.RELEASE_VERSION}+${env.GIT_COMMIT}"
19+
PACT_VERSION = "${env.BRANCH_NAME == 'main' ? env.RELEASE_VERSION : env.RELEASE_VERSION + '+' + env.GIT_COMMIT}"
2020
ROOT_DIRECTORY = "${params.verifyPacts == true && env.BRANCH_NAME == 'main' && env.SNAPSHOT_VERSION.endsWith("-SNAPSHOT") ? 'target/checkout' : '.'}"
2121
STAGE = "${env.BRANCH_NAME == 'main' ? 'production' : 'test'}"
2222
}

billing-service/Jenkinsfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ pipeline {
1616
PERFORM_RELEASE = "${env.SNAPSHOT_VERSION.contains('-SNAPSHOT') && env.BRANCH_NAME == 'main' && !env.LAST_COMMIT_MESSAGE.startsWith('update version to ')}"
1717
RELEASE_VERSION = "${env.SNAPSHOT_VERSION.contains('-SNAPSHOT') ? env.SNAPSHOT_VERSION.substring(0, env.SNAPSHOT_VERSION.lastIndexOf('-SNAPSHOT')) : SNAPSHOT_VERSION}"
1818
VERSION = "${env.BRANCH_NAME == 'main' && !env.LAST_COMMIT_MESSAGE.startsWith('update version to ') ? env.RELEASE_VERSION : env.SNAPSHOT_VERSION}"
19-
PACT_VERSION = "${env.RELEASE_VERSION}+${env.GIT_COMMIT}"
19+
PACT_VERSION = "${env.BRANCH_NAME == 'main' ? env.RELEASE_VERSION : env.RELEASE_VERSION + '+' + env.GIT_COMMIT}"
2020
ROOT_DIRECTORY = "${params.verifyPacts == true && env.BRANCH_NAME == 'main' && env.SNAPSHOT_VERSION.endsWith("-SNAPSHOT") ? 'target/checkout' : '.'}"
2121
STAGE = "${env.BRANCH_NAME == 'main' ? 'production' : 'test'}"
2222
}

customer-service/Jenkinsfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ pipeline {
1717
PERFORM_RELEASE = "${env.SNAPSHOT_VERSION.contains('-SNAPSHOT') && env.BRANCH_NAME == 'main' && !env.LAST_COMMIT_MESSAGE.startsWith('update version to ')}"
1818
RELEASE_VERSION = "${env.SNAPSHOT_VERSION.contains('-SNAPSHOT') ? env.SNAPSHOT_VERSION.substring(0, env.SNAPSHOT_VERSION.lastIndexOf('-SNAPSHOT')) : SNAPSHOT_VERSION}"
1919
VERSION = "${env.BRANCH_NAME == 'main' && !env.LAST_COMMIT_MESSAGE.startsWith('update version to ') ? env.RELEASE_VERSION : env.SNAPSHOT_VERSION}"
20-
PACT_VERSION = "${env.RELEASE_VERSION}+${env.GIT_COMMIT}"
20+
PACT_VERSION = "${env.BRANCH_NAME == 'main' ? env.RELEASE_VERSION : env.RELEASE_VERSION + '+' + env.GIT_COMMIT}"
2121
STAGE = "${env.BRANCH_NAME == 'main' ? 'production' : 'test'}"
2222
DEPLOYMENT_VERSION = "${params.deploymentVersion != 'latest' ? params.deploymentVersion : env.VERSION}"
2323
}

delivery-service/Jenkinsfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ pipeline {
1818
PERFORM_RELEASE = "${env.SNAPSHOT_VERSION.contains('-SNAPSHOT') && env.BRANCH_NAME == 'main' && !env.LAST_COMMIT_MESSAGE.startsWith('update version to ')}"
1919
RELEASE_VERSION = "${env.SNAPSHOT_VERSION.contains('-SNAPSHOT') ? env.SNAPSHOT_VERSION.substring(0, env.SNAPSHOT_VERSION.lastIndexOf('-SNAPSHOT')) : SNAPSHOT_VERSION}"
2020
VERSION = "${env.BRANCH_NAME == 'main' && !env.LAST_COMMIT_MESSAGE.startsWith('update version to ') ? env.RELEASE_VERSION : env.SNAPSHOT_VERSION}"
21-
PACT_VERSION = "${env.RELEASE_VERSION}+${env.GIT_COMMIT}"
21+
PACT_VERSION = "${env.BRANCH_NAME == 'main' ? env.RELEASE_VERSION : env.RELEASE_VERSION + '+' + env.GIT_COMMIT}"
2222
ROOT_DIRECTORY = "${params.verifyPacts == true && env.BRANCH_NAME == 'main' && env.SNAPSHOT_VERSION.endsWith("-SNAPSHOT") ? 'target/checkout' : '.'}"
2323
STAGE = "${env.BRANCH_NAME == 'main' ? 'production' : 'test'}"
2424
DEPLOYMENT_VERSION = "${params.deploymentVersion != 'latest' ? params.deploymentVersion : env.VERSION}"

0 commit comments

Comments
 (0)