1. やったこと
- Spring Cloud Contractのサンプルを実装して動かした
- 下記のガイドを参考に実装した
- Artifactをローカルリポジトリに配置して、Consumer側からアクセスできることを確認した
- Githubリポジトリに生成されたStubを配置して、Consumer側からアクセスできることを確認した
- 実装したサンプルは下記リポジトリ
2. バージョンなど
- Java 11
- AdoptOpenJDK-11.0.11+9
- Spring Boot 2.4.6
- Spring Cloud Contract 2.2.7.RELEASE
- Spring Cloud Contract 3.0.2
3. 気づき
3.1. Githubリポジトリにssh接続の場合にエラーになった
3.1.1. 事象
- エラーメッセージに下記のように出力された
Caused by: com.jcraft.jsch.JSchException: Auth fail
3.1.2. 原因
- GithubリポジトリにSSHでアクセスするためにはSSH鍵の登録が必要
- 以下の原因が想定される
- Github側にSSH鍵の登録を忘れた or 誤っている
- .ssh/configにSSH鍵の設定を忘れた or 誤っている
3.1.3. 解決
- GithubにSSH鍵を登録する
- .ssh/configにSSH鍵の設定をする
# .ssh/config例
Host github.com
IdentityFile ~/.ssh/id_rsa
User git
3.2. GithubにSSH鍵を設定したのにエラーになった
3.2.1. 事象
- エラーメッセージに下記のように出力された
Caused by: com.jcraft.jsch.JSchException: invalid privatekey: [B@3946075
3.2.2. 原因
- 使用できるSSH鍵は、RSA、かつPEMフォーマット
- Githubのページの通りにするとED25519だったり、OPENSSHフォーマットになってるかも
3.2.3. 解決
- SSH鍵を作成する時に以下のようなコマンドで作成した
ssh-keygen -m PEM -t rsa -b 4096 -C "your_email@example.com"
- SSH鍵の先頭が
-----BEGIN RSA PRIVATE KEY-----
になっていることを確認した
3.3. テストは成功したけど、Github接続するところでエラーが出ている
- 以下のようなエラーメッセージが出力されたと思ったが、出なくなったのでスキップ(エラーメッセージは記憶なので間違いあるかも)
Caused by: com.jcraft.jsch.agentproxyAgentProxyException: java.io.IOException: failed to fctrl usocket: -1
- ssh-agentを起動したらエラーが出なくなった、ような気がした
- ここでエラーになっても接続はできるようなので無視しても良いかも
3.4. Githubリポジトリのブランチ名がmasterじゃない
3.4.1. 事象
- エラーメッセージに下記のように出力された
Caused by: org.eclipse.jgit.api.errors.RefNotFoundException: Ref master cannot be resolved
3.4.2. 原因
- デフォルトでmasterブランチを参照するようになっているため
3.4.3. 解決
以下のいずれかで対応できる
- (1) AutoConfigureStubRunnerなどの設定で、
git.branch
にブランチ名を指定したpropertiesを設定する
@AutoConfigureStubRunner(
repositoryRoot = "git://git@github.com:ShigeoTejima/spring-cloud-contract-demo.git",
ids = {"com.example:cdc-producer-demo:+::8100"},
stubsMode = StubRunnerProperties.StubsMode.REMOTE,
properties = {"git.branch=main"})
- (2) 環境変数もしくはシステムプロパティでブランチ名を設定して実行する
- https://cloud.spring.io/spring-cloud-contract/reference/html/appendix.html#additional-application-properties
- この場合は、AutoConfigureStubRunnerなどで
git.branch
を指定しない
% env STUBRUNNER_PROPERTIES_GIT_BRANCH=main ./mvnw clean test
or
% ./mvnw -Dstubrunner.properties.git.branch=main clean test
おわり。