:::

在GitHub Actions的工作流加入時間變數 / Formatted Time Variables in the Workflow of GitHub Actions

2023-0208-015217.png

如果要讓工作流產生的檔案(artifact)用時間命名的話,要怎麼做呢?


時間變數 / Time Variables

GitHub Actions提供的情境(context)變數(variable)功能,兩者都跟變數有關。context主要能提供跟現在保存庫、工作流相關的資訊,vairable則是可讓使用者自訂參數使用。

不過如果我只要時間變數的話,要怎麼取得呢?

2023-0208-013835.png

https://stackoverflow.com/a/72267176 

最接近的答案是「${{ github.event.repository.updated_at}}」,它會產生現在保存庫最近的更新時間,結果是以ISO 8601格式產生,例如「2022-05-15T23:33:38Z」。

不過ISO 8601包含了太多特殊字元,這可沒辦法讓我作為檔案(artifact)的檔名啊。


取得現在的時間 / Get Current Time

https://github.com/josStorer/get-current-time

https://github.com/josStorer/get-current-time 

找了老半天,最後的答案竟然不是用GitHub Action提供的內建變數,而是使用別人製作的Action:get-current-time。

2023-0208-014215.png

https://github.com/pulipulichen/action-AutoIT-Builder/blob/aed01a57cc31324a6652c52e178723ff288e0f04/.github/workflows/ci.yml#L54 

使用方法很簡單,就在工作流的steps加入以下的步驟:

- name: Get current time
  uses: josStorer/get-current-time@v2.0.2
  id: current-time
  with:
    format: YYYYMMDD-HHmmSS
    utcOffset: "+08:00"

其中「format: YYYYMMDD-HHmmSS」使用了MomemtJS的語法。

2023-0208-014701.png

https://github.com/pulipulichen/action-AutoIT-Builder/blob/aed01a57cc31324a6652c52e178723ff288e0f04/.github/workflows/ci.yml#L64 

然後就可以用以下變數來使用它:

${{ steps.current-time.outputs.formattedTime }}

2023-0208-014823.png

之後下載檔案就會用當時的時間命名了。

怎麼記得當時用GitLab CI的時候還比較簡單一點,最差也能用$CI_COMMIT_SHORT_SHA吧?


你在設定workflow的時候有遇到什麼問題嗎?

歡迎下面分享~