如何在GitHub Actions多Job间共享eksctl安装步骤?
解决GitHub Actions中复用eksctl安装步骤的方法
方法一:创建复合动作(Composite Action)
把安装eksctl的步骤封装成自定义复合动作,所有需要的Job都能直接引用,不用重复写代码。
- 在仓库内创建路径
.github/actions/setup-eksctl/action.yml,内容如下:
name: 'Setup eksctl' description: 'Install eksctl binary' runs: using: 'composite' steps: - name: Install eksctl shell: bash run: | curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp sudo mv /tmp/eksctl /usr/local/bin
- 在原工作流的两个Job中直接引用该动作:
jobs: install-cluster: name: "staging - create cluster" runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup eksctl uses: ./.github/actions/setup-eksctl deploy-app: name: "staging - deploy application" runs-on: ubuntu-latest needs: install-cluster steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup eksctl uses: ./.github/actions/setup-eksctl # 后续部署步骤...
方法二:使用可复用工作流(Reusable Workflow)
如果除了eksctl安装,还有其他关联步骤需要复用,可以把包含eksctl安装的完整Job抽成可复用工作流,在主工作流中调用。
- 创建
.github/workflows/reusable-setup-eksctl.yml:
name: 'Reusable Setup eksctl' on: workflow_call: jobs: setup-eksctl: runs-on: ubuntu-latest steps: - name: Install eksctl run: | curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp sudo mv /tmp/eksctl /usr/local/bin
- 在主工作流中调用该可复用工作流,部署Job可依赖集群创建Job:
jobs: install-cluster: name: "staging - create cluster" runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Call reusable setup uses: ./.github/workflows/reusable-setup-eksctl.yml # 后续创建集群步骤... deploy-app: name: "staging - deploy application" runs-on: ubuntu-latest needs: install-cluster steps: - name: Checkout code uses: actions/checkout@v4 - name: Call reusable setup uses: ./.github/workflows/reusable-setup-eksctl.yml # 后续部署步骤...
补充说明
- 复合动作更适合复用单个/一组步骤,灵活性更高;可复用工作流适合复用完整Job逻辑,包括运行环境、步骤集合等。
- 两种方法都无需依赖缓存,通过代码复用避免重复编写安装步骤,后续维护只需修改一处,所有引用的地方都会同步更新。
内容的提问来源于stack exchange,提问作者d3vpasha
相关产品推荐
相关产品推荐

