株式会社ネットワールドのエンジニアがお届けする技術情報ブログです。
各製品のエキスパートたちが旬なトピックをご紹介します。

GitとCI/CDに関する知識ゼロのSEが、GitLabでSSHプロトコルでクローンとプッシュを試すだけの記事

2022/05/06 少しでも見やすく…と思い、ブログのスタイルを一部更新致しました。
2022/05/20 GitLabのデモ動画を作りました!このブログの末尾にリンクを張ったのでよろしければご視聴ください。 

皆様こんにちは。普段はセキュリティ商材を担当しているSEの小池と申します。

私の普段の業務はGitやCI/CDに無縁なのですが、会社から頂戴した「GitLabの技術ブログ書いておいて」というミッションを達成すべく、今回も頑張ってGitLabの技術をちまちま習得してまいります。
今回はシンプルにGitLabでSSHプロトコルを用いてクローンとプッシュを試すだけの話です。
(httpsについては次回ご紹介いたします。)

このブログの内容は以下の通りです。

本記事の対象の方

  • こちらのブログでGitLabに空 (README.mdだけ) のリポジトリを作成し、次のアクションを求めている方。
  • GitLabでリポジトリに対してsshでクローンorプッシュしようとしたけれど、やり方がよくわからない方。

今回のブログのゴール

このブログのゴールはこちらです!

このブログのゴール
  • GitLabでSSHプロトコルを用いたgitコマンド実行のために必要なキーペアを作成し、登録できるようになる。
  • GitLabの任意のリポジトリに対して、sshを用いてgit clone と git push ができるようになる。
  • (余裕があれば) mainブランチに対してpushを試行することで、Protected branchesの効果を確かめる。

このブログをお読みいただくにあたっての事前ご連絡事項

  • 本記事はGitLabがどういった製品なのかの説明はしておりません。製品説明につきましては弊社の製品ページ (こちら) をご参照ください。
  • 本記事はGitやCI/CDに関する知識ゼロのSEによるなんちゃって記事です。GitLabのディープな使用法についてはGitLabの公式オンラインドキュメント (こちら) をご参照ください。
  • 本記事はこちらのGitLabに関するブログの続きを想定しており、既にREADME.mdだけ含むリポジトリが存在していることを想定しております。
  • 本記事は GitLab Enterprise Edition 14.6.1-ee における仕様をベースに記載しております。それ以外のエディションやバージョンではこの記事に記載の通りではない可能性がございます。

sshキーペアを作る

sshを用いる場合はユーザー側でキーペアを作成し、その公開鍵をGitLabに登録することで利用可能になります。
本手順ではユーザーのPCのホームディレクトリにキーペアを作成します。

基本的にOSがWindowsでもLinuxでもmacOSでも手順は一緒です。
sshキーペア作成についてはGitLab Docsにもかなり親切な手順が載っていますので、それに沿って進めてみます。
Redirecting...

まずは既存のキーペアの有無を確認します。
ホームディレクトリに ".ssh" ディレクトリがあるかを確認します。
".ssh" ディレクトリがあった場合はその中にキーペアがあるかを確認してください。
下の画面は、WindowsOSにおいて現在操作しているユーザー "tech" にキーペアがあった場合の図です。

既存のキーペアを利用する場合はこの手順をスキップし、公開鍵をGitLabに登録する から実施してください。
既存のキーペアがない もしくは 新規で作る場合は、そのまま続きの手順を実施してキーペアを作成します。

ターミナルやコマンドプロンプトをGitLabを利用したいユーザーで開き、ssh-keygenコマンドでキーペアを作成します。
ここでは例として、アルゴリズムは ”ED25519”、コメントはGitLab上のユーザーのメールアドレスである "dev03@example.com" を設定して進めます。

$ ssh-keygen -t ed25519 -C "<GitLab上のユーザーのメールアドレス>"

次にキーペアの作成場所とファイル名の確認が表示されます。
今回はデフォルトのままEnterキーを押下して先に進めます。

パスフレーズを求められますので、任意のパスフレーズを入力します。
次に確認でもう一度パスフレーズを求められるので、同じパスフレーズを入力します。

sshキーペアの作成は以上です。

公開鍵をGitLabに登録する

前の手順で作成したsshキーペアの公開鍵をGitLabに登録します
この手順は管理者権限不要で、ユーザー自身で登録することができます。

まず、sshキーを登録したいユーザーでGitLabのGUIにサインインします。
サインインしたら、右上のユーザーアイコンから [Preferences] をクリックします。

左側のメニューで [SSH鍵] をクリックします。

前の手順で作成したキーペアの公開鍵をコピーします。
各OSのホームディレクトリ配下、".ssh" ディレクトリの中にある公開鍵をテキストエディタ等で開き、ファイルの中身の文字列を全てコピーします。
今回の手順の場合は "id_ed25519.pub" です。

コピーした公開鍵を下の画面赤枠部分に貼り付けます。
"タイトル" 欄にはキーペア作成時に指定したコメントが表示されます。

有効期限を任意に決めて、[キーを追加] をクリックします。
なお、有効期限を指定しない場合は無期限になります。

正常に追加されるとこんな画面が出ます。

以上で公開鍵の登録は完了です。

Windowsユーザー且つGitを使えない環境の方向け ~Gitのインストール~

さて今更なのですが…。
WindowsユーザーでクライアントPCにGitのツールをインストールしていない方は、とりあえずこの手順でGitをインストールしてみてください
本手順が不要な方は 接続確認とGitLabホストの信頼性確認 からご参照ください。

まずは以下のサイトへ行き、最新版のインストーラーを入手します。
http://git-scm.com

Windowsの64bitOSならこれを。

先ほどダウンロードしたインストーラーを実行します。
実行すると以下のようなウィザードが起動しますので、指示に従ってインストールします。
各種設定がよくわからない!という場合は、とりあえず全部デフォルトでインストールしてください。

インストール後、任意のフォルダーで右クリックすると何やらGitに関連するメニューが増えます。
GUIを使いたい場合は [Git GUI Here] 、コマンドで実行したい場合は [Git Bash Here] でクローンやらプッシュやらを試せます。
(個人的にはコマンドの方がとっつきやすいと思いますが、お好みでご選択ください。)

Windows且つGitが使えない方向けのGitインストールは以上です。

接続確認とGitLabホストの信頼性確認

先ほどのキーペアで接続できるか確認するのと、ついでにGitLabホストの信頼性確認を済ませます
Redirecting...

以下のコマンドを実行します。

$ ssh -T git@<GitLab環境のURL>

すると、以下の画面の赤枠の通り確認メッセージが出るので、yes で続行します。

何やらWarning メッセージなどが出ますが、とりあえず気にしないでください。

プロントが戻ってきたら、GitDocsに「もう一回同じコマンド実行してね。」とあるのでしぶしぶ実行します。
Redirecting...

$ ssh -T git@<GitLab環境のURL>

パスフレーズを求められた場合は入力します。
で。
このコマンドの出力ですが、理想としてはGitDocsに記載がある通り、"Welcome to GitLab, @<ユーザー名>!" と表示されるのが理想なのですが…。
実行しているOSユーザー名とGitLab側のユーザー名が一致していないと、異なるメッセージが表示されます

OSのユーザー名とGitLab側のユーザー名が一致しているとこんな出力になり…

OSのユーザー名とGitLab側のユーザー名が一致していないとこんな出力になります。

ただ、このOSユーザー名とGitLabユーザー名が一致しないことが原因で "Permission denied (publickey)." が出ても、一応今回の目標であるgitのクローンやプッシュは可能なので、、、今回は気にせずこのまま突き進みます!

sshでクローンを試行する

とりあえず既存のプロジェクトからリポジトリをクローンしてみましょう
クローンしたいプロジェクトのページに移動し、[クローン]>[SSHでクローン]のURLをコピーします。

後は各自でご利用なさっているGitツールの使用方法に合わせて試してみてください !!
説明放棄・・・
クローンの仕方がよくわからない方のみ、後続のコマンド例をご参照いただき、クローンを試行してみてください。

カレントディレクトリを任意の場所に移動してから、以下のコマンドを実行します。

$ git clone <先ほどコピーした文字列>

キーペアのパスフレーズを求められた場合は、入力します。

カレントディレクトリにリポジトリがクローン出来ていることを確認します。

sshプロトコルを使用したクローン試行は以上です。

sshでmainブランチにプッシュを試行する

ここでは、mainブランチに対してプッシュを試みます
先に言っておくと、対象プロジェクトに対して "Maintainer" か "Owner" の権限を持っているユーザー以外は通常 main ブランチにはプッシュできません
これは、GitLab14.0以降は "main"、それより前では "master" がデフォルトブランチ 且つ Protected branchesであり、保護されているからです。
Protected branchesとデフォルトブランチについては、こちらのブログで概要を述べておりますので、よろしければご参照ください。
blogs.networld.co.jp

したがってこの章は、"Maintainer" か "Owner" でmainブランチ (Protected branches) にプッシュできることを確認する、もしくは、他の権限のユーザーでmainブランチ (Protected branches) にプッシュできないことを確認する、といった内容になります。
なお、Gitの基本的な操作が分かっていらっしゃる方は、ご自身の手順やツールでお試しください
プッシュの仕方がよくわからない方のみ、後続のコマンド例をご参照いただき、mainブランチへのpushをご試行いただければと存じます。

先ほどクローンしたリポジトリに移動し、ブランチはmainのまま適当なファイルを追加します。

$ cd <先ほどcloneしたリポジトリ名>
$ touch <適当なファイル名>

適当なファイルを追加したら、コミットします。

$ git add .
$ git commit -m "<コメントを任意に入力>"

mainブランチへのpushを試行します。

$ git push origin main

"Maintainer" もしくは "Owner" 権限のユーザーで実行した場合はpushが正常終了します。

この場合は、GitLabのGUIからもmainブランチのリポジトリにファイルが増えていることを確認できます。

それ以外の権限のユーザーで実行した場合は、以下のようなメッセージでpushが失敗します。
error: failed to push some refs to 'ssh://<GitLabのURL>/<リポジトリパス>'

こちらのブログで記載したProtected branchesがどんなものかを確認しながら、mainブランチへのpushを試行していただければと存じます。
sshプロトコルを使用したmainブランチへのpush試行は以上です。

別名ブランチでpushする

ここではmainブランチをクローンした後に、ローカルで別ブランチを作成し、それをpushしてみます
別名の新しいブランチ作成は、デフォルトでは"Developer"、"Maintainer"、"Owner"のいずれかであれば可能です

ここでも自力で試せる!という方はご自身の方法でご試行いただければと存じます
試行方法が分からない方は、後続のコマンド例をご参照ください。

先ほどクローンしたリポジトリに移動し、別名のブランチを作成します。

$ cd "<先ほどcloneしたリポジトリ名>"
$ git checkout -b "<任意のブランチ名>"

新しく作成したブランチで適当なファイルを追加します。

$ touch "<適当なファイル名>"

新しく作成したブランチへの変更をコミットします。

$ git add .
$ git commit -m "<コメントを任意に入力>""

別名のブランチでpushを試行します。

$ git push origin <先ほど作成した任意のブランチ名と同じ文字列>

pushに成功するとこんな感じになります!

GUIからも新しい別名のブランチが作成されていることが確認できます。

sshプロトコルを使用した別名ブランチのpush試行は以上です。

最後に

この度はGitもCI/CDもよくわかっていないど素人SEによるGitLab検証ブログをお読みいただき、誠にありがとうございます。
このブログの目標は以下のとおりでしたが、皆さまはいかがでしたでしょうか。

このブログのゴール
  • GitLabでSSHプロトコルを用いたgitコマンド実行のために必要なキーペアを作成し、登録できるようになる。
  • GitLabの任意のリポジトリに対して、sshを用いてgit clone と git push ができるようになる。
  • (余裕があれば) mainブランチに対してpushを試行することで、Protected branchesの効果を確かめる。

今回はシンプルに、GitLabの任意のリポジトリに対してSSHプロトコルを用いてgit cloneとgit pushをするだけでした。
次回もシンプルに、httpsを用いたgit clone等について紹介いたします。
この記事が「なんかよくわからんけどGitLabをとりあえず触りたい!」という方のお力になれば幸甚にございます。


GitLabに関するお問い合わせは、以下のフォームからお願い致します。
GitLab製品 お問い合わせ

2022/05/20追記
GitLab操作デモ動画 (基本編) を作っちゃいました。
つたない内容ではありますが、ご興味がおありでしたら是非ご視聴いただければと存じます。

www.youtube.com