【问题标题】:Github action run two process one after otherGithub action 一个接一个地运行两个进程
【发布时间】:2021-06-29 03:22:06
【问题描述】:

我有两个 GitHub 操作应该一个接一个地运行, 第一个install 1 正在安装和运行服务器(例如,服务器在端口 3000 上运行),这可行,但是安装 1 没有完成(服务器是否已启动并且您没有收到“停止”信号,这没关系)但我需要继续下一步install 2 只有在服务器启动时,我应该如何解决这个问题?

简而言之,当您运行某个进程并且您需要在一段时间后运行其他进程时

请查看repoaction

- name: install 1
  shell: bash
  run: |
    make install
    make run
    
- name: install 2
  shell: bash
  run: |
    kubectl apply -f ./config/samples/test.yaml

我使用 kubebuilder 生成项目,包括 makefile... https://github.com/kubernetes-sigs/kubebuilder

【问题讨论】:

    标签: github github-actions


    【解决方案1】:

    使用needs 关键字。您还希望将它们分成不同的jobs

    jobs:
      job1:
        runs-on: ubuntu-latest
        steps:
        - name: install 1
          shell: bash
          run: |
            make install
            make run
    
      job2:
        runs-on: ubuntu-latest
        needs: job1
        steps:
        - name: install 2
          shell: bash
          run: |
            kubectl apply -f ./config/samples/test.yaml
    

    【讨论】:

    • 谢谢! ,我已经尝试过它有点棘手,它没有帮助,因为当服务器启动并运行时(运行时make run)被卡住并且不启动job2中的下一个命令,任何其他想法让它工作?
    【解决方案2】:

    install 1install 2这两个进程已经被隐式if: ${{ success() }}一个接一个地执行了。

    您的问题是服务器尚未完全启动。解决这个问题有几种可能:

    1. 使用sleep command 等待几秒钟:
      - name: install 2
        shell: bash
        run: |
          sleep 10 &&
          kubectl apply -f ./config/samples/test.yaml
    
    1. 等待端口打开,例如使用工具wait-port
    2. 使用本地 Linux 工具 netcatnetcat/netstat 等待端口打开

    您也可以自己创建一个退出代码,您可以在this post 的下一步中使用它:

      - name: install 1
        id: install1
        shell: bash
        run: |
          make install
          make run
          echo ::set-output name=exit_code::$?
    
      - name: install 2
        if: steps.install1.outputs.exit_code == 0
        shell: bash
        run: |
          kubectl apply -f ./config/samples/test.yaml
    

    编辑:我想我找到了你的问题。通过执行make run,您的服务器将永久运行并阻止该操作的进一步处理。例如,您可以使用make run & 在后台运行make run。而且我认为你也不需要这两个工作。构建过程中的更多详细信息,您可以添加debug option

    【讨论】:

    • 谢谢,问题是服务器已启动并正在运行,它不会继续执行下一步/命令。我猜它没有得到一些“完成”信号的原因,因为它......
    • 我添加了一个替代解决方案。 :D
    • 谢谢,我会尝试下一个建议,另外请参阅我的帖子更新,我已经提交了正是这样做的 repo,你能看看吗?
    • 你可以克隆它并播放:)
    • 问题被&解决了。结果,该进程在后台运行,不再阻止进一步的进程。调试应该只帮助您以后,如果再次出现错误,以便更容易找到它。 IE。如果您愿意,您也可以取消该选项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多