【问题标题】:Is there a way to set a date and time (timezone) in Azure DevOps CI/CD build pipeline有没有办法在 Azure DevOps CI/CD 构建管道中设置日期和时间(时区)
【发布时间】:2019-07-05 11:12:54
【问题描述】:

我在 CI/CD 构建管道中运行了自动化测试,但 DevOps 中的时间是 UTC,而我的断言测试检查的是本地时间。 有没有办法在我的构建管道中设置时区?

【问题讨论】:

  • 没有。你有一个更大的问题:你的测试依赖于外部依赖。如果您在不同的时区聘请了远程开发人员,您将遇到完全相同的问题。修复您的测试或修复您的日期处理代码,使其与时区无关。
  • 我同意在可能的情况下与时区无关是件好事,但不确定语气是否公平。依赖并不总是是邪恶的。例如,集成测试可能依赖于外部测试环境——我个人为一个系统编写集成,该系统既不知道时区,又完全不受我的控制来修复。因此,我有一个硬性要求,即我的代码(和测试)始终在时区与我正在集成的系统匹配的服务器上运行。

标签: azure-devops continuous-integration


【解决方案1】:

是的。例如,这个简单的 BASH 脚本使用 Microsoft 托管代理运行:

echo "checking date"
date
echo "setting date to Asia/Kolkata"
sudo timedatectl set-timezone "Asia/Kolkata"
date

日志中看到的结果:

2019-07-05T20:26:48.5992486Z checking date
2019-07-05T20:26:48.5992954Z Fri Jul  5 20:26:48 UTC 2019
2019-07-05T20:26:48.5993264Z setting date to Asia/Kolkata
2019-07-05T20:26:48.9107025Z Sat Jul  6 01:56:48 IST 2019

如您所见,您可以在代理上操纵本地时间。我不同意另一位发帖人的观点,即在运行测试的情况下这必然是一件坏事。

您在测试中添加了一些额外的代码来说明本地/目标时间,或者您可以在构建代理中添加 1 行并实现相同的目标。

这取决于,魔鬼在细节中。小心处理时间。

【讨论】:

    【解决方案2】:

    使用 Powershell,您可以:

    Get-TimeZone
    Set-TimeZone "India Standard Time"
    Get-TimeZone
    

    【讨论】:

      【解决方案3】:

      对于 Windows Powershell 和 Linux Bash 的其他回复, Mac OSX 代理如 xcode 或 Xamarin.iOS 应使用以下脚本设置时区:

      - task: Bash@3
          displayName: Set Mac OS X Timezone
          inputs:
              targetType: 'inline'
              script: sudo systemsetup -settimezone Asia/Shanghai
      

      【讨论】:

        【解决方案4】:

        亚洲/加尔各答和“sudo timedatectl set-timezone”在 mac OS vmimage 上不起作用。在 mac 上使用以下任务。

         - task: CmdLine@2
            displayName: Set system Timezone to IST
            inputs:
              script: |
                sudo systemsetup -gettimezone
                sudo systemsetup -settimezone Asia/Calcutta
                sudo systemsetup -gettimezone
        

        您也可以使用此命令获取所有有效时区的列表

        sudo systemsetup -listtimezones
        

        【讨论】:

          【解决方案5】:

          如果使用ubuntu代理,可以使用以下命令。

          • 列出时区:timedatectl list-timezones
          • 设置时区:sudo timedatectl set-timezone '<your timezone>'

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-12-20
            • 2021-10-27
            • 1970-01-01
            • 2020-10-13
            • 2020-04-07
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多