【インフラ_13日目】CI/CD_1冊目
こんにちは投資ロウトです。
背景
・CI/ CDをシステムに導入していかなければならない背景があります。
パッケージ
・パッケージ・・・ソフトウェアの利用になければならないファイルをまとめたもの
例)
NodejsやReact等はnpmの言語パッケージ
macなどはhomebrewのOSパッケージ
Dockerはコンテナイメージのパッケージ
・パッケージマネージャークライアント・・・npmなどのツールのこと
・パッケージレジストリ・・・DockerなどはDocker Hubを利用する
GitHub Packages
・GitHub Packages・・・マネージドなパッケージレジストリサービスのこと
※パブリックなパッケージであれば無料
Container Registry
Container Registry・・・コンテナイメージを管理するパッケージレジストリのこと
# 環境変数をセットしておくと、ログインに利用できるとのこと
export GHCR_USER=$(gh config get -h github.com user)
そしてDockerfileを作成し、
# ビルドを実施
docker build -t ghcr.io/${GHCR_USER}/example:latest docker/example/
# 以下のようなエラーが出てしまった
ERROR: Cannot connect to the Docker daemon at unix:///Users/xxx/.docker/run/docker.sock. Is the docker daemon running?
Docker Desktopを起動したら上手くいきました
上記のようにビルドが完成すると、Container Registryへプッシュするのが次ステップとのこと。
# 最初はGitHub Packagesへのアクセスが拒否されるようになっているので、権限変更が必要とのこと
gh auth refresh --scopes write:packages
# Container Registryへログイン
gh auth token | docker login ghcr.io -u ${GHCR_USER} --password-stdin
# gh auth token・・・GitHub CLIのクレデンシャルを取得
# docker login・・・上記からクレデンシャルを受け取ってログイン
# コンテナイメージをプッシュする
docker push ghcr.io/${GHCR_USER}/example:latest
# コンテナイメージはプルできるとのこと
docker pull ghcr.io/${GHCR_USER}/example:latest
GitHub Packages
作成したパッケージは以下で確認できるとのこと。
あれ・・・packageが作成されていない・・・
コマンド入力が誤っていた
※上記は修正済み
# 下記コマンドを実施したときに上記の画面がきちんとコマンドをかけていると、開かれるはず
gh auth refresh --scopes write:packages
そして再度先ほどのコマンドを実施していくと、、、
無事に作成できていました
パッケージのパーミッション
またデフォルトでは上記のパッケージは作成者以外、アクセスできないそうです。またGitHub Actionsも排除されてしまうとのこと。
上記から
【上記から下記の設定が可能とのこと】
・GitHub Actions
・GitHub Codespaces
・Teamsや個人アカウント
また誰でもパッケージを見てもらえるようにしたい場合は、下記のChange package visibilltyをオンにする必要があるとのことでした。
またGitHub Packagesの仕様上、一度publicにすると、privateに戻せない制約もあるとのことでした。
パッケージの自動リンク
また毎回パッケージの設定をするのは、面倒なので、自動化させることも可能とのことでした。
docker build -t ghcr.io/${GHCR_USER}/auto-link:latest \
--label "org.opencontainers.image.source=https://github.com/${GHCR_USER}/リポジトリ名" \
docker/example/
# 自動リンクをpushとのこと
docker push ghcr.io/${GHCR_USER}/auto-link
コンテナイメージの自動リリース
# ワークフローの実行
gh workflow run 対象のyml -f version=0.1.0
# 上記を実行するも、下記のようなエラーが発生してしまった。
could not create workflow dispatch event: HTTP 422: Workflow does not have 'workflow_dispatch' trigger (https://api.github.com/repos/xxxyyy/リポジトリ/actions/workflows/xxxx/yyyy)
以下に類似するエラー記載あり。
上記のリンクは関係ありませんでした。yamlのインデントの問題によるエラーでした。上手くいったら下記のようになります。
docker パブリッシュワークフロー
「docker/login-action」・・・コンテナレジストリへログインするアクション
・registryキー・・・ホスト名を指定
・usernameキー・・・ログインユーザー名を指定
・passwordキー・・・ログインパスワードを指定
「docker/metadata-action」・・・イメージタグやラベルなどのメタデータを生成するアクション
※ビルド時に利用するとのこと。
「docker/build-push-action」・・・コンテナイメージをビルドするアクション
と短いですが、以上で学習を区切りたいと思います。ご精読ありがとうございました。焦らずコツコツ頑張っていきたいと思います。
Discussion