今天要提到一些关於 GitHub Action 内撰写 YAML 一些技巧,环境变数 (Environment Variables) 与秘密 (Secrets)。虽然第一次使用的朋友看见这类型撰写内容会感觉难以阅读 (例如: ${{ env.DAY_OF_WEEK == 'Mon' }}
),但可以达到取得目前执行状态、变数重复使用、多环境设定 与 保护敏感资讯 效果,让开发人员更容易维护 YAML 档案。
GitHub 已经预设了多个环境变数让 GitHub Actions workflow 使用,理所当然,开发人员也可以设定自订的环境变数在你的 workflow 档案中。环境变数区分大小写 (case-sensitive),且能在 action 与 step 建立、读取、修改环境变数。
如果你要在档案中设定环境变数,必须使用 env 语法进行设定,并且在 step 或 action 内使用。以下图为例,在 job 中以 env:
宣告变数,在後续以 ${{ <expression> }}
方式使用。
可以使用 GitHub Context, Env Context, Job Context, Step Context 与 Runner Context,也能在里面使用运算子 (如: == 与 && ) 与 Function (如: conntains() 与 startsWith() )
若你要在某个 Step 内建立/更新环境变数,让後续的 Step,你可以透过下列语法建立。以下列 YAML 档案为例,在 step_one 建立了一个环境变数 action_state,内容值为 yellow,虽然在 step_one 内无法取得 yellow,但在step_two 後即可使用此环境变数
steps:
- name: Set the value
id: step_one
run: |
echo "action_state=yellow" >> $GITHUB_ENV
- name: Use the value
id: step_two
run: |
echo "${{ env.action_state }}" # This will output 'yellow'
有些时候,workflow 需要一些敏感资讯 (如:密码、秘密或Key) 才能与其他服务互动。若将这些重要资讯写死在 YAML 上相当危险,若你的 repo 是 public,等同是直接将敏感资讯暴露在网路上。另一方面,即使 repo 是 private,production 资讯我们也不愿让所有协同开发者取得,避免不必要的风险。
GitHub 内可以设定 Secret,在 YAML 档案内以类似环境变数方式取得,如此一来,即使 YAML 档案暴露在外,也不用担心敏感资讯外流。建立 Secret 步骤如下:
开启 Repo,点选右上方 Settings 功能
点选右边选单 secret > 点选右上角 New repository secret
输入 Name 与 Value
完成後,即可看见已经建立好的 secret
当你在 YAML 中使用时,只需要透过 ${{ secrets.name }}
,如下面范例
steps:
- name: Hello world action
with: # Set the secret as an input
API_SECRET: ${{ secrets.APISecret }}
env: # Or as an environment variable
API_API_SECRET: ${{ secrets.APISecret }}
多环境其实意旨在保护 Production 的相关设定,你在 YAML 档案可以定义此 workflow 的目标环境
environment: Dev
当你在 YAML 中使用时,只需要透过 ${{ secrets.name }}
格式即可使用,如下面范例
steps:
- name: Hello world action
with: # Set the secret as an input
API_SECRET: ${{ secrets.APISecret }}
env: # Or as an environment variable
API_API_SECRET: ${{ secrets.APISecret }}
建立方法多了一些步骤:
开启 Repo,点选右上方 Setting 功能
点选左边 Enviroment,点选右上角 New Enviroment (若你已经建立环境,可以跳过此步骤)
输入环境名称,点选 configure environment
找到 Environment secrets, 点选 Add secret.
输入名称与值,完成後,即可看见 Secret 已经设定好了
阅读完本篇文章,你应该对环境变数与秘密的使用已经有初步的了解。这章节的内容稍微繁琐一些,实际操作的时候需要多尝试才能累积经验。实作中若需要了解更多语法,可以参考最下方参考资料。
若喜欢我的文章,欢迎点 like, 分享与订阅。
https://docs.github.com/en/actions/reference/environment-variables
https://docs.github.com/en/actions/reference/workflow-commands-for-github-actions
https://docs.github.com/en/actions/reference/encrypted-secrets
<<: Day 14 - Object and Arrays - Reference VS Copy
一日客语:中文:柚子 客语:U欸 是收集资料的类型 主要功用:可以用於快速搜索和查找资料 Map又称...
屯马开通真的很兴奋 早阵子(2021 年 6 月 27 日)港铁屯马綫全綫通车,当日有电视台访问了一...
继续昨天的主题,该怎麽用 Chakra UI 做开发呢?现成的元件该怎麽去做客制化?专案有定设计系统...
连续 30 天不中断每天上传一支教学影片,教你如何用 React 加上 Firebase 打造社群...
一、简易说明 Mongo DB 对於单个 Document 的大小限制为 16MB, 若想储存大於这...