GitTub秘密と行動を結合すること
Aを探している間CI/CD 私のサイドプロジェクトの解決策はGitHub Secrets 機能.使用GitHub Actions , あなたは様々なカスタマイズ可能な方法でトリガ自動ビルドを設定できます.あなたのオートメーションパイプラインの一部が展開または第三者への配送を含むならば、あなたは何らかの種類の承認トークンを使用しているでしょう.一般的な知識は、プレーンテキストで超秘密の認証ファイルを格納することは大きなnoであるので、Github秘密は、一日を保存する来る!
Actions Secrets Credits
Githubアクションは単純であるか複雑である必要があります.しかし、ここでは、コミットが直接行われるたびに、ターゲットリポジトリからbashスクリプトを実行するアクションがあります
GitHub秘密を定義するためには、特定のリポジトリのいずれかの設定>秘密のアクションページに移動する必要があります.このページの命名規則は少し奇妙です.Githubはそれを呼び出します
ドキュメントは、以下のような秘密に関する規則については非常に明確です. 名前は英数字とアンダースコアのみを含むことができます. 名前は 秘密の値は
他にいくつかの規則がありますが、このポストには関係ありません. アクションワークフロー(パイプライン)で秘密を使用するには、次のようにします.
たとえば、リポジトリの秘密を作成すると、
秘密はGitHubのログ出力で検閲されているので、ワークフローが実行されたときに値が解釈されることを明示的に表示できません.しかし、実行することによって
参照
さあ、ちょっとスパイスしましょう.いくつかの認証キー、例えばsshキー、azure devops/Google cloud認証トークン、パスワードなどをパスしようとしているとします.見ましょう.
値
おっ!チェックが失敗しました.😕 秘密は、それが再割り当てされた値に等しくありません.
では、どうなったの?さて、ワークフローに埋め込まれた秘密は、実際にはジョブコマンドとは別のものと解釈されます.だから、
それは、最も微妙な変化です、しかし、Wow ...😅 私の間違いy ' allから学んでください.
あなたがより学びたいならばGitHub Secrets and the limits they have , どのようにGPGで大きな秘密を暗号化する方法について説明ドキュメントページの下部をチェックしてください.次回まで、読んでくれてありがとう!
カバーイメージStefan Steinbauer on Unsplash ! :ディー
目次
アクション
Githubアクションは単純であるか複雑である必要があります.しかし、ここでは、コミットが直接行われるたびに、ターゲットリポジトリからbashスクリプトを実行するアクションがあります
main
枝name: Deploy Instance
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v2
- name: Deploy
run: ./script/deploy
この場合、アクションはリポジトリにGitチェックアウトを実行し、配備スクリプトを実行します.秘密
GitHub秘密を定義するためには、特定のリポジトリのいずれかの設定>秘密のアクションページに移動する必要があります.このページの命名規則は少し奇妙です.Githubはそれを呼び出します
<GitHub repository url>/settings/secrets/actions
. 🤔ドキュメントは、以下のような秘密に関する規則については非常に明確です.
A-Z
, a-z
, 0-9
or _
) GITHUB_
, この接頭辞他にいくつかの規則がありますが、このポストには関係ありません.
${{ secrets.NAME }}
, ここでNAME
あなたが秘密と呼んだものは何でも.たとえば、リポジトリの秘密を作成すると、
MY_SECRET
, そして、それに価値を与えてください.helloworld
, によって出力される値${{ secrets.MY_SECRET }}
どんな行動でもhelloworld
.秘密はGitHubのログ出力で検閲されているので、ワークフローが実行されたときに値が解釈されることを明示的に表示できません.しかし、実行することによって
if
ワークフローによって実行されるbashスクリプト内のステートメントでは、秘密の実際の値を確認することができます.😎参照
check.sh
下記#!/usr/bin/env bash
if [ "$MY_SECRET" == "helloworld" ]; then
echo "that's the one!"
else
echo "secret does not match"
fi
上記のbashスクリプトをコミットすることによって、以前からの動作ワークフローを新しい秘密を使用して、その値が予想通りであることをチェックするために更新されることができます.参照check.yml
:name: Check
on:
push:
branches: [ main ]
jobs:
check:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v2
- name: chmod
run: chmod +x ./scripts/*
- name: Check
run: MY_SECRET="${{ secrets.MY_SECRET }}" ./scripts/check.sh
上記ワークフローをmain
ブランチ、アクションをトリガーし、現在の秘密値をcheck.sh
検証用スクリプトです.秘密の値は簡単ですので、チェックは成功する必要があります!さあ、ちょっとスパイスしましょう.いくつかの認証キー、例えばsshキー、azure devops/Google cloud認証トークン、パスワードなどをパスしようとしているとします.見ましょう.
値
MY_SECRET
より複雑なものに再割り当てされます.apple_microsoft_$123
, the check.sh
したがって、スクリプトを更新する必要があります.#!/usr/bin/env bash
if [ "$MY_SECRET" == 'apple_microsoft_$123' ]; then
echo "that's the one!"
else
echo "secret does not match"
fi
新しい値の引用符を覚えておいてくださいcheck.sh
単一引用符でなければなりません(’
) スクリプトが解釈しないように$123
完全な値の一部の代わりに変数として.おっ!チェックが失敗しました.😕 秘密は、それが再割り当てされた値に等しくありません.
では、どうなったの?さて、ワークフローに埋め込まれた秘密は、実際にはジョブコマンドとは別のものと解釈されます.だから、
${{ secrets.MY_SECRET }}
が実行されると、Githubは既に秘密の値を解釈し、ジョブコマンドに挿入します.仕事が終わる.MY_SECRET=”apple_microsoft$123” ./scripts/check.sh
の代わりにMY_SECRET=apple_microsoft$123 ./scripts/check.sh
. 秘密は最初に解釈されるので、同じ変更をするcheck.sh
ワークフローにする必要があります.ダブル引用符の代わりにシングル引用符を使用してください!name: Check
on:
push:
branches: [ main ]
jobs:
check:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v2
- name: chmod
run: chmod +x ./scripts/*
- name: Check
run: MY_SECRET='${{ secrets.MY_SECRET }}' ./scripts/check.sh
今、チェックは成功し、秘密の特殊文字は意図した動作を中断しません!それは、最も微妙な変化です、しかし、Wow ...😅 私の間違いy ' allから学んでください.
あなたがより学びたいならばGitHub Secrets and the limits they have , どのようにGPGで大きな秘密を暗号化する方法について説明ドキュメントページの下部をチェックしてください.次回まで、読んでくれてありがとう!
クレジット
カバーイメージStefan Steinbauer on Unsplash ! :ディー
Reference
この問題について(GitTub秘密と行動を結合すること), 我々は、より多くの情報をここで見つけました https://dev.to/foresthoffman/combining-github-secrets-and-actions-4081テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol