【インフラ_7日目】CI/CD_1冊目
こんにちは投資ロウトです。
背景
・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