Azure Linux 应用服务:在 DevOps 管道部署后安装软件包。

5

我目前正在Azure Devops中设置CI/CD流水线,以在Linux托管的应用服务上部署NodeJS应用程序(不是虚拟机)。

我的构建和部署都很顺利,但是我需要确保一些软件包在应用程序部署后安装到环境中。

问题在于:无论我创建什么apt-get脚本,在部署之后,我必须手动运行它们才能实际生效。但是在流水线日志中,它们似乎已经被执行了。

这是我YAML代码中负责部署的部分,我漏掉了什么吗?

- stage: Deploy
  displayName: Deploy stage
  dependsOn: Build
  condition: succeeded()
  jobs:
  - deployment: Deploy
    displayName: Deploy
    environment: $(environmentName)
    pool:
      vmImage: $(vmImageName)
    workspace:
      clean: all
    strategy:
      runOnce:
        deploy:
          steps:
          - task: AzureWebApp@1
            displayName: 'Azure Web App Deploy:'
            inputs:
              azureSubscription: $(azureSubscription)
              appType: webAppLinux
              appName: $(webAppName)
              runtimeStack: 'NODE|16-lts'
              package: $(Pipeline.Workspace)/drop/drop$(Build.BuildNumber).zip
              startUpCommand: 'pm2 start index.js --no-daemon'
        on:
         success:
           steps:
           - script: sudo apt-get update
             displayName: apt update
           - script: sudo apt-get -y [SOME LIBS] 
             displayName: try install dependencies

谢谢!

为什么您要在部署应用程序后尝试安装依赖项? - Chayan Bansal
1
因为有一些Linux软件包不在环境中,但是需要运行一些NPM软件包。例如,只有当我执行以下命令时,puppeteer才能正常工作: “apt-get -y install libglib2.0-0 libgconf-2-4 libatk1.0-0 libatk-bridge2.0-0 libgdk-pixbuf2.0-0 libgtk-3-0 libgbm-dev libnss3-dev libxss-dev libasound2”由于每次部署都会重置环境,所以我需要在应用程序部署后自动运行它,而不是手动运行。 - Thomas KiTe Trentin
1
为了简单起见,您可以将这些命令添加到startUpCommand中。此外,您可以使用Docker容器。Docker将为您提供更多的灵活性。 - Chayan Bansal
1个回答

0

目前,我使用一个名为“startup.sh”的文件,在每次部署后手动运行。不过稍后我会尝试使用Docker。


你是否已经找到任何解决方案,或者你仍然每次手动运行脚本? - Kingalione
幸运的是,我们很少部署这项服务。但除非您使用Docker,否则这是我唯一的解决方案。 - Thomas KiTe Trentin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接