📌

【インフラ_7日目】CI/CD_1冊目

2024/08/09に公開

こんにちは投資ロウトです。

背景

・CI/ CDをシステムに導入していかなければならない背景があります。

コンテキスト

・コンテキスト・・・実行時等の情報を保持するオブジェクトのこと

【種類】
・githubコンテキスト・・・ワークフロー実行時の情報を保持。
・runnerコンテキスト・・・ジョブ実行時のランナー情報を保持。

環境変数

GitHubActionsでは環境変数をenvキーで定義するとのこと。

また環境変数はオーバーライド(上書き)をすることも可能とのこと。

Variables

環境変数だと単一のワークフローしか適用されないため、複数のワークフローで共通の値を使用したい場合は、Variablesを使用するといいとのこと。

ただしVariablesは事前に登録が必要とのことです。
※下記はVariablesをGUI上で手動で追加する方法

GitHubのGUI上からでも登録できるとのこと

# CLIからでも登録できるとのこと
gh variable set FRUITNAME --body 'banana'

先ほど追加したvariablesは「vars.FRUITNAME」という方法で取得できるとのこと。

Secrets

Secrets・・・GitHub Actionsで他の人に公開したくない機密情報を扱いたいときに使う。

【Secretsを使用するメリット】
・暗号化される
・ログの時にマスクしてくれる
・登録後に値が再確認できない

記載は省略しますが、cliでも登録は可能とのこと。
※variableに似た書き方になる

またSecretsは「secrets.PASSWORD」で取得が可能とのこと。

ただしログマスクは一文字変えるだけで回避できてしまうため、そもそもログに出すこと自体が危険というお話がありました。
※変数名が完全一致で防ぐため、記載方法を変えられてしまうと、情報が盗み取られてしまう危険性があるとのことです。

GitHub Actionsは式を使って取得することも可能とのこと。

${{<式の内容>}}

リテラルには以下のような型の値を使うことが可能とのこと
・null
・boolean
・number
・string

これらがあるとのこと。またオーソドックな演算子もあるとのことです。

関数

contains, startWith, endWithなどのような関数も提供されているとのことでした。

条件分岐

ifキーへ式を指定すると、ステップやジョブの条件分岐ができるとのことです。

またステータスチェック関数があり、GitHub Actionsで処理途中で失敗すると、失敗した時だけ処理するようなことができるとのことでした。

【ステータスチェック関数】
・success
・failure
→例外キャッチのような役目が果たせるため、よく使用されるとのこと。
・cancelled
・always

命名規則

ジョブ名とステップ名を記載すると、ログを追うときに段違いに理解度が上がるとのことでした。

ワークフロー名も「run-name」を使うと、ログが探しやすくできるとのことです。

ステップ間のデータ共有

ワークフロー等のステップごとに値を共有(渡そう)しようとすると、下記のように設定をする必要があるとのこと
①GITHUB_OUTPUT

# 値の書き出し(変数に代入)
run: echo "変数名=値" >> "${GITHUB_OUTPUT}"
# 値の参照(変数に設定した値を使用)
RESULT: ${{ steps.source.outputs.変数名 }}

②GITHUB_ENV

こちら(②GITHUB_ENV)も別のステップで使用できるとのことですが、グローバル変数として登録されるめ、バグの温床になりやすいとのことで、利用は控えた方がいいとのことでした。

GitHub API

GitHubAPI・・・プログラムからアクセスできるAPIのこと

またこのAPIを実行するには、認証が必要とのことです。またその認証情報を取得するには、「GITHUB_TOKEN」を必要とするとのことでした。

【取得の2パターン】
※どちらでも同じですが、統一した方が可読性が上がるとのことでした。

# A
${{ secrets.GITHUB_TOKEN }}
# B
${{ github.token }}

ローカルでgh auth loginでローカルで行うなら問題ないのですが、GitHub Actionsではダメとのことです。

# 以下をすることで、GitHub CLIは自動的にクレデンシャルを読み込んでくれるとのことです。
env:
   GITHUB_TOKEN: ${{上記の設定の2パターンのどちらか}}

GitHubから提供しているもの

一から構築しなくても、デフォルトで記載してくれているものもあるとのことでした。

New workflowから

自分がやりたいワークフローを選ぶと

すでに用意してくれたものがあるよ!とのことです。また特定の言語やツールに特化したワークフローはあまり出てこないというお話もありました。

と短いですが、以上で学習を区切りたいと思います。ご精読ありがとうございました。焦らずコツコツ頑張っていきたいと思います。

Discussion