概要
「GitOps」ということで、ローカルリポジトリにある Terraform定義ファイル等を GitLab に用意されたリモートリポジトリにプッシュしてみます。簡単な流れは以下となります。
- GitLabのプロジェクト(リモートリポジトリ)のクローン作成
- ローカルリポジトリからリモートリポジトリへのプッシュ
ローカル環境
- macOS Monterey 12.1
- Azure CLI 2.28.0
- terraform v1.0.11
- git 2.34.1
前提条件
- GitLab環境上にアカウント(Owner)が用意されていること
- ローカル環境に「azure cli」がインストールされていること
- ローカル環境に「terraform」環境が構成されていること
- ローカル環境に「git」がインストールされていること
事前準備
- GitLab で パーソナルアクセストークン を発行してみました でアクセストークンを入手していること
- GitLab上で新規プロジェクトを作成していること(今回は、このプロジェクト を利用します)
- .gitignore をサクッと作成してみましたの環境が準備できていること
GitLabのプロジェクト(リモートリポジトリ)のクローン作成
プロジェクトのURLの情報の入手
ローカル環境でのクローン作成
1. ローカル環境にて gitの設定を行います。
## gitの設定
$ git config --global user.name "<GitLabに接続するユーザ名>"
$ git config --global user.email <GitLabに接続するユーザのメールアドレス>
## gitの設定内容の確認
$ git config --list
2. 「git clone」を実行します。
## クローン作成
$ git clone <該当プロジェクトのURL>
Cloning into 'basic'...
remote: HTTP Basic: Access denied
fatal: Authentication failed for '<該当プロジェクトのURL>'
## 上記エラーが帰って場合、以下のコマンドを実行
$ git config --system --unset credential.helper
## 再度クローンを作成
$ git clone <該当プロジェクトのURL>
Cloning into 'basic'...
Username for 'https://gitlab.xxxxxxxx': <GitLabに接続するユーザ名>
Password for 'https://itsuruzono@gitlab.xxxxxxxx': <上記ユーザ名のアクセストークン>
remote: Enumerating objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 3
Receiving objects: 100% (3/3), done.
## クローン結果の確認
$ ls -l
total 0
drwxr-xr-x 3 ituru staff 96 1 19 15:53 ./
drwxr-xr-x 4 ituru staff 128 1 18 17:00 ../
drwxr-xr-x 4 ituru staff 128 1 19 15:54 basic/
$ cd basic
$ ls -l
total 8
drwxr-xr-x 4 ituru staff 128 1 19 15:54 ./
drwxr-xr-x 3 ituru staff 96 1 19 15:53 ../
drwxr-xr-x 13 ituru staff 416 1 19 15:54 .git/
-rw-r--r-- 1 ituru staff 50 1 19 15:54 README.md
3. 「.gitignore」の作成
## .zshrc に定義した Function をコール
$ GitIgnore
$ ls -l
drwxr-xr-x 5 ituru staff 160 1 19 16:10 ./
drwxr-xr-x 3 ituru staff 96 1 19 15:53 ../
drwxr-xr-x 13 ituru staff 416 1 19 15:54 .git/
-rw-r--r-- 1 ituru staff 4327 1 19 16:10 .gitignore
-rw-r--r-- 1 ituru staff 50 1 19 15:54 README.md
ローカルリポジトリからリモートリポジトリへのプッシュ
ローカルリポジトリへのコミット
1. Terraform定義ファイルを作成します。また、内容に合わせ「README.md」を編集します。
## 作業ディレクトリでの上記実行後の構成
$ ls -l
total 24
drwxr-xr-x 6 ituru staff 192 1 19 16:21 ./
drwxr-xr-x 3 ituru staff 96 1 19 15:53 ../
drwxr-xr-x 13 ituru staff 416 1 19 15:54 .git/
-rw-r--r-- 1 ituru staff 4327 1 19 16:10 .gitignore
drwxr-xr-x 8 ituru staff 256 1 19 16:21 Base/
-rw-r--r-- 1 ituru staff 143 1 19 16:25 README.md
$ tree -a
.
├── .git
│ ├── FETCH_HEAD
│ ├── HEAD
│ ├── config
│ ├── description
│ ├── hooks
│ │ ├── applypatch-msg.sample
│ │ ├── commit-msg.sample
│ │ ├── fsmonitor-watchman.sample
│ │ ├── post-update.sample
│ │ ├── pre-applypatch.sample
│ │ ├── pre-commit.sample
│ │ ├── pre-merge-commit.sample
│ │ ├── pre-push.sample
│ │ ├── pre-rebase.sample
│ │ ├── pre-receive.sample
│ │ ├── prepare-commit-msg.sample
│ │ ├── push-to-checkout.sample
│ │ └── update.sample
│ ├── index
│ ├── info
│ │ └── exclude
│ ├── logs
│ │ ├── HEAD
│ │ └── refs
│ │ ├── heads
│ │ │ └── main
│ │ └── remotes
│ │ └── origin
│ │ └── HEAD
│ ├── objects
│ │ ├── info
│ │ └── pack
│ │ ├── pack-fa6ffae153cd2baabdfa742a8b2137b1c794b1e3.idx
│ │ └── pack-fa6ffae153cd2baabdfa742a8b2137b1c794b1e3.pack
│ ├── packed-refs
│ └── refs
│ ├── heads
│ │ └── main
│ ├── remotes
│ │ └── origin
│ │ └── HEAD
│ └── tags
├── .gitignore
├── Base
│ ├── .terraform
│ │ ├── providers
│ │ │ └── registry.terraform.io
│ │ │ └── hashicorp
│ │ │ └── azurerm
│ │ │ └── 2.92.0
│ │ │ └── darwin_amd64
│ │ │ └── terraform-provider-azurerm_v2.92.0_x5
│ │ └── terraform.tfstate
│ ├── .terraform.lock.hcl
│ ├── main.tf
│ ├── terraform.tfvars
│ ├── terraform_AzureBase.md
│ └── variables.tf
└── README.md
24 directories, 36 files
2 ローカルリポジトリへコミットします。
## 作業ディレクトリ内の変更をステージング領域に追加
$ git add -A
## ステージングされたスナップショットをローカルリポジトリに登録(コミット)
$ git commit -m "First Commit"
[main xxxxxxx] First Commit
6 files changed, 663 insertions(+), 1 deletion(-)
create mode 100644 .gitignore
create mode 100644 Base/.terraform.lock.hcl
create mode 100644 Base/main.tf
create mode 100644 Base/terraform_AzureBase.md
create mode 100644 Base/variables.tf
3. リモートリポジトリへプッシュします。
## ローカルリポジトリからリモートリポジトリへのプッシュ
$ git push
Username for 'https://gitlab.xxxxxxxx': <GitLabに接続するユーザ名>
Password for 'https://itsuruzono@gitlab.xxxxxxxx': <上記ユーザ名のアクセストークン>
Enumerating objects: 11, done.
Counting objects: 100% (11/11), done.
Delta compression using up to 16 threads
Compressing objects: 100% (9/9), done.
Writing objects: 100% (9/9), 7.99 KiB | 7.99 MiB/s, done.
Total 9 (delta 0), reused 0 (delta 0), pack-reused 0
To https://gitlab.xxxxxxxx/terraformdeazure_01/basic.git
21ce6e4..937fe5c main -> main
GitLabでプッシュの結果を確認します。.gitignoreで定義されている不要ファイル・ディレクトリはなく、必要なもののみ存在を確認できます。また、 README.md ファイルも変更されています。
まとめ
これで ローカルリポジトリにある情報を リモートリポジトリである GitLab のプロジェクトへ問題なくプッシュできることを確認できました。