【问题标题】:It is possible to run GitHub Workflow Actions in an Azure DevOps Pipeline?是否可以在 Azure DevOps 管道中运行 GitHub 工作流操作?
【发布时间】:2021-05-23 03:49:10
【问题描述】:

据我了解,GitHub 操作也可以由 (Linux) Docker 映像执行以执行特定任务。

例如,此 GitHub 操作 Azure/static-web-apps-deploy@v0.0.1-preview 使用 Docker 映像 mcr.microsoft.com/appsvc/staticappsclient:stable 将项目部署到 Azure 静态 Web 应用程序。

有没有办法在 YAML DevOps 管道中调用/执行/运行这个 Docker 映像?

【问题讨论】:

  • 我认为它“不太可能”,尽管我承认没有尝试过。看起来你可以从事一个有趣的项目。
  • 嗨,您有机会查看以下更新吗?如果它帮助您解决此问题,请告诉我
  • 是的,您在答案中的信息和解决方法的链接(我已经找到,但没有遵循,因为它看起来像一种解决方法)确实解决了我能够使用安装 dotnet 的问题须藤命令。但是mcr.microsoft.com/appsvc/staticappsclient:stable 仍然不起作用,我为此创建了一个问题(github.com/microsoft/Oryx/issues/938github.com/microsoft/Oryx/issues/945)。

标签: docker azure-devops yaml azure-pipelines github-actions


【解决方案1】:

Azure devops 管道中的Container jobs 可能是您正在寻找的。​​p>

当您在管道中指定容器时,代理将首先获取并启动容器。然后,作业的每一步都将在容器内运行。因此,您可以将 Docker 映像设置为容器。见下例:

到容器中的run a job

pool:
  vmImage: 'ubuntu-18.04'

container: mcr.microsoft.com/appsvc/staticappsclient:stable

steps:
- script: printenv

在容器中运行certain task

resources:
  containers:
  - container: staticappsclient
    image: mcr.microsoft.com/appsvc/staticappsclient:stable

steps:
- task: SampleTask@1
  target: host
- task: AnotherTask@1
  target: staticappsclient  # this task will run in the container

更新:

在未预装 sudo 的容器内运行 sudo 命令。您可以按以下步骤结帐:

1、通过在Optionoptions: "--name ci-container -v /usr/bin/docker:/tmp/docker:ro"中定义--name参数来命名容器

2、在你的 yaml 管道之上添加一个脚本任务来安装sudo

- script: |
      /tmp/docker exec -t -u 0 ci-container \
      sh -c "apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -o Dpkg::Options::="--force-confold" -y install sudo"

3,在以下脚本任务中运行脚本以安装 dotnet 3.1:请参阅下面的完整 yaml 示例:

resources:
  containers:
  - container: staticappsclient
    image: mcr.microsoft.com/appsvc/staticappsclient:stable
    options: "--name ci-container -v /usr/bin/docker:/tmp/docker:ro"

container: staticappsclient

steps:
- script: |
      /tmp/docker exec -t -u 0 ci-container \
      sh -c "apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -o Dpkg::Options::="--force-confold" -y install sudo"
   
  
- script: |
    
    wget -O - https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.asc.gpg
    
    sudo mv microsoft.asc.gpg /etc/apt/trusted.gpg.d/
    wget https://packages.microsoft.com/config/debian/9/prod.list
    sudo mv prod.list /etc/apt/sources.list.d/microsoft-prod.list
    sudo chown root:root /etc/apt/trusted.gpg.d/microsoft.asc.gpg
    sudo chown root:root /etc/apt/sources.list.d/microsoft-prod.list
    
    sudo apt-get install -y apt-transport-https && \
    sudo apt-get update && \
    sudo apt-get install -y dotnet-sdk-3.1

请参阅this thread 了解更多信息。

【讨论】:

  • 您好@levi-lu-msft,感谢您指出这个方向。但是在这种特定情况下,我只是使用 CmdLine@2 任务在容器内执行一些命令,但是执行“sudo”命令失败。你知道为什么吗?
  • @StefHeyenrath 这些步骤是在帐户 vsts_azpcontainer 下执行的,该帐户被授予 SUDO 权限并允许它在没有身份验证的情况下运行任何命令。您可以尝试使用 bash 任务代替 cmdline 任务吗?
  • 你好@levi-lu-msft。我正在尝试运行“StaticSitesClient”命令,但是由于github.com/microsoft/Oryx/issues/938 而失败所以我尝试在(Debian)容器中手动安装dotnet,但是“mv”命令失败并出现mv: cannot create regular file '/etc/apt/trusted.gpg.d/microsoft.asc.gpg': Permission denied
  • @StefHeyenrath 好像是known issue。但是,您可以使用上述解决方法修复它。请参阅上面的更新。
猜你喜欢
  • 2021-02-22
  • 1970-01-01
  • 2019-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多