【问题标题】:Get current date and time in GitHub workflows在 GitHub 工作流程中获取当前日期和时间
【发布时间】:2020-07-11 12:02:30
【问题描述】:

我有一个 GitHub 工作流程,用于发布存储库的夜间快照。它使用the create-release action。这就是工作流文件现在的样子:

name: Release Nightly Snapshot

on:
  schedule:
  - cron: "0 0 * * *"

jobs:
  build:
    name: Release Nightly Snapshot
    runs-on: ubuntu-latest
    steps:
      - name: Checkout master Branch
        uses: actions/checkout@v2
        with:
          ref: 'master'
      - name: Create Release
        id: nightly-snapshot
        uses: actions/create-release@latest
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: 'nightly snapshot'
          release_name: 'nightly snapshot'
          draft: false
          prerelease: false

我希望 tag_namerelease_name 使用当前日期和时间,而不是硬编码值。但是,我找不到任何关于它的文档。我该怎么做?

【问题讨论】:

    标签: github github-api github-actions


    【解决方案1】:

    this post,您可以创建一个set its output 的步骤,其值为$(date +'%Y-%m-%d')

    然后使用${{ steps.date.outputs.date }} 使用此输出。以下显示了环境变量和输入的示例:

    on: [push, pull_request]
    name: build
    jobs:
      build:
        name: Example
        runs-on: ubuntu-latest
        steps:
          - name: Get current date
            id: date
            run: echo "::set-output name=date::$(date +'%Y-%m-%d')"
          - name: Test with environment variables
            run: echo $TAG_NAME - $RELEASE_NAME
            env:
              TAG_NAME: nightly-tag-${{ steps.date.outputs.date }}
              RELEASE_NAME: nightly-release-${{ steps.date.outputs.date }}
          - name: Test with input
            uses: actions/hello-world-docker-action@master
            with:
              who-to-greet: Mona-the-Octocat-${{ steps.date.outputs.date }}
    

    输出:

    * Test with environment variables
    nightly-tag-2020-03-31 - nightly-release-2020-03-31
    
    * Test with input
    Hello Mona-the-Octocat-2020-03-31
    

    【讨论】:

    • 不是专家,但我不明白这是如何工作的,因为您似乎混合了 2 个不同的概念。 echo "{name}={value}" >> $GITHUB_ENV 用于设置环境变量,但您定义了一个您的脚本从不使用的 name env 变量。而${{ steps.<step_id>.outputs.<output_id> }} 用于读取步骤的输出,但您尝试读取date 输出的date 步骤从未写过。我会改用:run: echo "::set-output name=today::$(date +'%Y-%m-%d')",然后是${{ steps.date.outputs.today }}
    • 对我来说,run: echo "MY_DATE=$(date +%Y%m%d%H%M)" >> $GITHUB_ENV 迈出了新的一步,在随后的步骤中${{ env.MY_DATE }} 工作了。如本答案stackoverflow.com/a/64649397/2584278 中所述。
    • 答案对我不起作用,但@Jean-AlexisAufauvre 有效。
    • @chenrui 您的编辑无效,原始输出应该有效。我不明白你为什么要删除 set-output。
    • 似乎 ::set-output 现在已经过时了。仍在寻找如何将构建日期设置为环境变量
    【解决方案2】:

    这是通过环境变量执行此操作的另一种方法(来自this post):

    name: deploy
    on: [push]
    jobs:
      build:
        runs-on: ubuntu-latest
        steps:
          - name: Set current date as env variable
            run: echo "NOW::$(date +'%Y-%m-%dT%H:%M:%S')" >> $GITHUB_ENV
          - name: Echo current date
            run: echo $NOW
    

    这会将日期设置为环境变量,如果您想在后续步骤的脚本/程序中使用它,这将非常有用。

    【讨论】:

    • 很遗憾,set-env 现在已弃用:github.blog/changelog/…
    • 谢谢,我只是使用 $(date +'%Y-%m-%dT%H:%M:%S') 为预发布包设置临时构建。例如-p:PackageVersion=$(date +'%Y%m%d.%H%M%S')-预览。
    猜你喜欢
    • 2022-11-04
    • 2020-08-20
    • 2015-03-22
    • 2012-12-04
    • 2012-04-29
    • 2015-11-12
    • 2015-01-18
    • 1970-01-01
    相关资源
    最近更新 更多