概要
Windows環境にて、JavaプロジェクトをAWS CodeCommitのリポジトリで管理する方法です。
AWS CodeCommitの準備やsshでの接続方法は、AWSのSetting Up for AWS CodeCommitページにあるFor SSH Connections on Windowsの通りに進めました。
記事編集中に誤ってオリジナルの記事を削除してしまいました。stockして頂いた方、申し訳ありません。この記事はバックアップから再度投稿したものになります。
環境
- Windows10
- PuTTY 0.67 (一式)
- Git for Windows 2.9.0
作業手順
- WindowsにGitやSSHクライアントなどをインストールします
- Windows側でCodeCommitのリポジトリにアクセスするためのssh認証鍵を作成します
- AWS側でCodeCommitのリポジトリにアクセスできるIAMユーザーを登録します
- PuTTYを使ってsshで接続できるか確認します
- AWS CodeCommitにリポジトリを作成します
- Windows側でリポジトリで管理するプロジェクトを作成します
- 作成したプロジェクトをGit化します
- Git化(=ローカルリポジトリ)したプロジェクトをリモートリポジトリ(=CodeCommit)へpushします
- ローカルリポジトリをeclipseに取り込みます
- eclipseから修正したコードをcommit、pushします
準備
Git for Windowsのインストール
Git ClientとしてGit for Windowsを使用します。
Git for Windowsよりインストーラーを入手してインストールを行います。
$ git --version
git version 2.9.0.windows.1
インストールが終わったら、Git bashを実行して下記の初期設定を行います。
$ git config --global user.name "rubytomato"
$ git config --global user.email rubytomato@example.com
$ git config --global core.autoCRLF false
PuTTYのインストール
リポジトリへはsshで接続するのでSSHクライアントをインストールします。今回はPuTTYを使用するのでPuTTYよりWindows用のアーカイブファイルをダウンロードし適当な場所へ展開します。
PUTTY_HOMEという名前の環境変数にそのディレクトリを登録します。(必須ではないです)
PUTTY_HOME : %HOME%\dev\putty
次にGit_SSHという環境変数にplink.exeへの絶対パスを登録します。(必要です)
Git_SSH : %PUTTY_HOME%\plink.exe
- plink.exeはPuTTYに同梱されているsshコマンドのWindows版です。
PUTTYGENで秘密鍵を作成します
PUTTYGET.EXEを起動し2048bitのSSH-2 RSAで秘密鍵を作成します。(パスフレーズは設定しませんでした。)
画面上に表示されている公開鍵は、あとでAWSのIAMユーザーのSSH公開キーとして使用します。
registryの登録
適当な名前のregファイルを作成し下記の内容を貼り付けて保存します。(情報が更新されているかもしれませんので、必ずAWSのSetup Steps for SSH Connections to AWS CodeCommit Repositories on Windowsを確認してください。)
regファイルをダブルクリックするとregistryに保存するか尋ねられるので「はい」で続けます。
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys]
"rsa2@22:git-codecommit.us-east-1.amazonaws.com"="AAAAB3NzaC1yc2EAAAADAQABAAABAQCdut7aOM5Zh16OJ+GOP75O7x5oyHKAiA1ieuySetj/hAq4VrAuZV5R2TypZJcKBaripOtTc/Sr0FOU4YvxUla40PPH8N1lbDp6Pnc4BexKsrt2kz++TqIKx5FHmUQV3mit16kxRwHey3dv030+qXBDo3WPQjm2+JLoq0XcadpnCAMCd3ChaBnDRM+51GZbuEFilpZsxUchUzl0gseC+shYOBd7TqxTlIhj/56d/YF1kq7RMZYrwBnyYdVhpLeUJCeYjyx/O6FPSezNTLiinz5jjioWZATgn+G8feL/hIsk8g+7JoIcb2muUlymdxs+8l2lS+8MXqT0q9ohT+Knhb2j"
CodeCommitにアクセスできるIAMの作成
AWS CONSOLEのIAMダッシュボードを開き、CodeCommitのアクセス権限を持つユーザーを登録します。
「アクセス許可」タブの管理ポリシーから「ポリシーのアタッチ」ボタンをクリックし、「AWSCodeCommitFullAccess」をアタッチします。
次に「認証情報」タブのAWS CodeCommitのSSHキーから「SSH公開キーのアップロード」ボタンをクリックし、先ほど作成した公開鍵を貼り付けます。
SSH公開キーが登録されるとSSHキーIDが発行されます。このSSHキーIDがWindowsからsshを使ってリポジトリへアクセスする際のユーザー名になります。
接続確認
pagent.exe
pagent.exeを起動し、上記で作成した秘密鍵を登録します。
(pagent.exeはPuTTYに同梱されている認証エージェントプログラムです。)
登録したらcloseボタンを押して画面を閉じます。(pagent自体はバックグラウンドで実行し続けます。)
plink.exeで接続テスト
コマンドプロンプトを開き次のコマンドを実行して、このメッセージが表示されることを確認します。
<SSHキーID>には、IAMに割り当てられているSSHキーIDを指定します。
> plink.exe -ssh <SSHキーID>@git-codecommit.us-east-1.amazonaws.com
Using username "<SSHキーID>".
You have successfully authenticated over SSH. You can use Git to interact with AWS CodeCommit. Interactive shells are not supported.FATAL ERROR: Server unexpectedly closed network
connection
CodeCommitにリポジトリを作成
CodeCommitのダッシュボードよりリポジトリを作成します。
CodeCommitが利用できるリージョンは"米国東部(バージニア北部)"になります。
リポジトリの名前はmy_repo_demo
としました。
リポジトリの名前をクリックするとコードの確認や設定が行えます。
Code
Settings
Default branchの欄が空欄になっていますが、作成したばかりのリポジトリにはmasterを含め1つもブランチはありません。
Clone URLよりSSHのURLをコピーします。
リポジトリで管理するJavaプロジェクトを作成
mavenでJavaプロジェクトのひな型を作成します。
今回はこれをそのままリポジトリへpushします。
> mvn archetype:generate -DgroupId=com.example.myrepodemo -DartifactId=my_repo_demo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
> cd my_repo_demo
> mvn eclipse:eclipse
.gitignoreファイルを作成
プロジェクト内に.gitignoreファイルを作成しておきます。
とりあえず下記の内容で作成しました。
/target/
/.classpath
/.project
/.settings/
git化
このプロジェクトのディレクトリGit Bashで開き以下のコマンドを実行してgit化します。
$ git init
Initialized empty Git repository in D:/dev/eclipse-jee-mars-1-workspace/my_repo_demo/.git/
$ git status
On branch master
Initial commit
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
pom.xml
src/
nothing added to commit but untracked files present (use "git add" to track)
$ git add .
$ git commit -m "first commit"
[master (root-commit) 0dc1248] first commit
4 files changed, 173 insertions(+)
create mode 100644 .gitignore
create mode 100644 pom.xml
create mode 100644 src/main/java/com/example/myrepodemo/App.java
create mode 100644 src/test/java/com/example/myrepodemo/AppTest.java
リモートリポジトリを確認します
リモートリポジトリはまだありません。
$ git remote -v
リモートリポジトリを作成します。
$ git remote add origin ssh://<SSHキーID>@git-codecommit.us-east-1.amazonaws.com/v1/repos/my_repo_demo
git remote add <name> <url>
- name : リモートリポジトリの短縮ショートカット
- url : リモートリポジトリのURL
もう一度リモートリポジトリを確認します
$ git remote -v
origin ssh://<SSHキーID>@git-codecommit.us-east-1.amazonaws.com/v1/repos/my_repo_demo (fetch)
origin ssh://<SSHキーID>@git-codecommit.us-east-1.amazonaws.com/v1/repos/my_repo_demo (push)
ローカルリポジトリの内容をリモートリポジトリへプッシュします
$ git push -u origin master
Counting objects: 21, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (10/10), done.
Writing objects: 100% (21/21), 2.76 KiB | 0 bytes/s, done.
Total 21 (delta 0), reused 0 (delta 0)
remote:
To ssh://<SSHキーID>@git-codecommit.us-east-1.amazonaws.com/v1/repos/my_repo_demo
* [new branch] master -> master
Branch master set up to track remote branch master from origin.
git push <remote> <branch>
- remote : リモートリポジトリの短縮ショートカット名
- branch : ローカルリポジトリのブランチ名
オプション -u
についてはgit push -u
オプションの意味
AWS CodeCommitのダッシュボードで確認
この時点でプロジェクトのソースコードがダッシュボードで確認できるようになっています。
eclipseにプロジェクトをインポートする
eclipseを立ち上げ、"Add an existing local Git Repository to this view"をクリックしローカルリポジトリをインポートします。
なおeclipseから接続する際にも、pagentが起動している必要があります。
上記で作成したローカルリポジトリの場所を指定します。
インポート直後の状態です。
eclipseからファイルを更新する
例としてプロジェクトにREADME.MDファイルを追加しました。
"Add to Index"、"Commit"後に"Push to Upstream"でCodeCommitのリポジトリへコミットをpushします。