복합 GitHub 작업을 통해 워크플로우를 더 작고 재사용 가능
19349 단어 productivitydevopsgithub
이 밖에 우리는 최근에 monorepo 구조로 전환하여 여러 응용 프로그램을 동시에 배치하기 위해 새로운 작업 흐름을 구축하고 있다.monorepo 구조를 사용한 결과 GitHub 작업 흐름의 크기와 용도가 각각 다르다.예를 들어 어떤 작업 흐름은 간단한 임무를 수행하는데 예를 들어 하나의 구성 요소에 대해 단원 테스트를 하고 다른 대형 작업 흐름은 완전한 생산 환경을 배치한다.
본고는 복합 GitHub 조작을 사용하여 작업 흐름을 더욱 작고 다시 사용할 수 있는 구성 요소로 나누는 방법을 보여 주는 데 목적을 둔다.
로컬 GitHub 작업
복합 작업에 대해 논의하기 전에 먼저 로컬 GitHub 작업에 대해 논의해야 합니다.일반적으로 GitHub 워크플로우를 만들면 Marketplace의 작업을 사용하지만, 시장에 발표하여 자신의 작업을 사용할 필요는 없습니다.로컬 GitHub 작업
use
개를 저장소에 저장할 수 있다는 사실을 알고 계십니까?로컬 작업은 같은 저장소에 저장된 다른 기초 구조 코드와 함께 유지보수할 수 있기 때문에 구성 요소화 GitHub 작업 흐름에 매우 적합하다.GitHub 워크플로우
.github/workflows
의 .github/actions
디렉토리 옆에 저장하는 것은 좋지만 실제로는 저장소의 어느 곳에나 위치할 수 있습니다.모든 사용자 정의 작업은 자신의 디렉터리와
action.yml
으로 정의해야 한다.action.yml
을 만들면 standard metadata을 추가하여 조작의 조작 방식을 정의할 수 있습니다.워크플로에서 로컬 작업을 사용하려면 다음 구문을 사용하십시오(
.github/actions
디렉토리에 사용자 정의 작업을 저장한 경우).jobs:
run-local-action:
steps:
# Checkout the repository first
# Otherwise the workflow won't be able to find the action
- use: actions/checkout@v2
- name: Run custom action
# Use the location in the repository (without action.yml)
uses: ./.github/actions/my-custom-action
with:
custom-input: 10
로컬 작업은 GitHub 작업을 만드는 데 아주 좋은 방법으로 사용자가 원하는 방식에 따라 맞춤형 작업을 할 수 있으며 다른 제품의 발표를 관리할 필요가 없습니다.복합 작용
복합 작업은 만들 수 있는 three different types custom GitHub Actions(복합, JavaScript 및 Docker) 중 하나입니다.주요 차이점은 복합 조작의
action.yml -> runs
속성은 실행할 프로그램의 목록이 아니라 실행할 프로그램의 목록을 포함한다는 것이다.runs:
using: "composite"
steps:
steps
부분의 작용은 거의 steps
section in a workflow과 완전히 같지만 약간의 차이는 뒤에 개술할 것이다.로컬 복합 GitHub 만들기 작업은 GitHub 워크플로우를 분할하는 완벽한 방법으로 보입니다!
너는 너의 업무 절차를 복합 동작으로 분해해야 합니까?
몇 주 동안 복합 동작을 사용한 후에 나는 네가 반드시 그것들을 사용해야 한다고 생각한다. 왜냐하면 그것들은 더욱 작고 읽을 수 있는 작업 흐름을 초래했기 때문이다. 왜냐하면 모든 동작은 특정한 목적을 가지고 있기 때문이다.
다음은 업무 흐름에서 복합 조작을 사용하는 장점과 한계를 추가했다.
우세하다
Actions
보기에서 여러 단계가 하나의 단계로 압축되어 워크플로우 진행률 action.yml
파일의 묘사성이 GitHub 작업 흐름의 가독성을 향상시켰다.제한성
shell
을 정의해야 한다.예.
배포 노드가 있는 GitHub 워크플로우를 가정합니다.js/Express API 및 AWS S3용 React 응용 프로그램다음과 같이 저장소의
.github/workflows/deploy-app.yml
에 저장됩니다.name: Deploy app
on:
pull_request:
jobs:
deploy-api:
outputs:
# Output the deployed API URL for consumption later
url: ${{ steps.deploy.output.url }}
steps:
- uses: actions/checkout@v2
# ...more steps to deploy an API and output a URL
deploy-frontend:
name: Deploy frontend to AWS S3
needs: deploy-api
steps:
- uses: actions/checkout@v2
- uses: aws-actions/configure-aws-credentials@v1
with:
# Always store tokens in a secret manager. Here I am using GitHub Secrets
aws-access-key-id: ${{ secrets.AWS_ACCESS_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_KEY }}
aws-region: eu-west-1
- uses: actions/setup-node@v2
with:
node-version: 14
- name: Install dependencies
working-directory: ./frontend
run: npm ci
- name: Build app
working-directory: ./frontend
run: npm run build
env:
APP_NAME: Demo
API_URL: ${{ needs.deploy-api.outputs.url }}
- name: Upload app to AWS S3
working-directory: ./frontend
run: aws s3 sync build s3://my-bucket --delete
이 작업 흐름 자체는 상대적으로 작고 읽을 수 있지만, 다른 프로그램을 추가해서 배치하거나, 더 복잡한 전단 배치일 경우, 비대해지고 읽기 어려워질 수 있다고 상상해 보세요.이 워크플로우를 한층 더 검증하기 위해
frontend-deploy
작업의 대부분을 하나의 복합 작업으로 통합할 수 있습니다.사용자 정의 작업 파일 만들기
우선, 우리는 디렉터리와
action.yml
을 만듭니다.앞에서 말한 바와 같이 사용자 정의 조작을 .github/actions
디렉터리에 저장하는 것은 일치한다.따라서 내 deploy-frontend-to-s3
작업은 .github/actions/deploy-frontend-to-s3/action.yml
으로 저장되어 다음과 같은 저장소 구조를 제공합니다..github
- workflows
- deploy-app.yml
- actions
- deploy-api/action.yml
- deploy-frontend-to-s3/action.yml
deploy-frontend-to-s3
복합 작업 수행현재
action.yml
파일을 만들었습니다. deploy-frontend
작업의 많은 절차를 작업 흐름에서 작업 흐름으로 옮길 수 있습니다.먼저
name
, description
및 inputs
을 action.yml
에 추가할 수 있습니다.name: "Deploy Frontend to S3"
description: "Builds and deploys the React frontend to AWS S3"
inputs:
aws-access-key-id:
required: true
description: "The aws-access-key-id used to authenticate with AWS"
aws-secret-access-key:
required: true
description: "The aws-secret-access-key used to authenticate with AWS"
app-name:
required: false
description: "The app name used by the React app"
default: Demo
api-url:
required: true
description: "The URL of the Express app"
그런 다음 이전에 워크플로우에 있었던 명령을 실행하는 작업의 일부를 만들 수 있습니다.우리는 어떻게 ${{ inputs.input-name }}
을 사용하여 상술한 입력을 참고하는지 주의하십시오.# ...name, description and inputs as above
runs:
using: "composite"
steps:
- uses: aws-actions/configure-aws-credentials@v1
with:
# Actions cannot access secrets so pass them in as inputs
aws-access-key-id: ${{ inputs.aws-access-key-id }}
aws-secret-access-key: ${{ inputs.aws-secret-access-key }}
aws-region: eu-west-1
- uses: actions/setup-node@v2
with:
node-version: 14
- name: Install dependencies
working-directory: ./frontend
run: npm ci
- name: Build app
working-directory: ./frontend
run: npm run build
env:
APP_NAME: ${{ inputs.app-name }}
API_URL: ${{ inputs.api-url }}
- name: Upload app to AWS S3
working-directory: ./frontend
run: aws s3 sync build s3://my-bucket --delete
steps
부분은 거의 작업 흐름 steps
부분의 복사와 붙여넣기입니다.유일하게 부족한 부분은 actions/checkout
입니다. GitHub이 로컬 작업에 접근할 수 있도록 작업 흐름에 있어야 하기 때문입니다.deploy-app
워크플로의 사용자 지정 작업 사용이제 워크플로에서 사용할 수 있는 사용자 정의 작업이 구축되었습니다.
name: Deploy app
on:
pull_request:
jobs:
deploy-api:
outputs:
# Output the deployed API URL for consumption later
url: ${{ steps.deploy.output.url }}
steps:
- uses: actions/checkout@v2
- id: deploy
uses: ./.github/actions/deploy-api
deploy-frontend:
name: Deploy frontend to AWS S3
needs: deploy-api
steps:
- uses: actions/checkout@v2
- name: Deploy frontend
# Directory name only
uses: ./.github/actions/deploy-frontend-to-s3
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_KEY }}
# won't pass in app-name as it's defaulted to "Demo"
api-url: ${{ needs.deploy-api.outputs.url }}
우리 망했어!deploy-app
워크플로우의 크기를 줄이고 S3에 전면 배포를 위한 재사용 가능한 복합 작업을 수행했습니다.작업 디렉토리의 파일 사용
복합 동작을 만들 때,
action.yml
에서 사용하는 유틸리티 파일을 만들어야 할 수도 있습니다.이 동작을 실행할 때 ${{ github.action_path }}
변수를 사용하여 인용해야 합니다. 이렇게 하면 다시 위치를 정하면 경로를 업데이트할 필요가 없습니다.따라서
.github/actions/deploy-frontend-to-s3/fetch-bucket-name.sh
이라는 파일을 작업에서 ${{ github.action_path }}/fetch-bucket-name.sh
이라고 할 수 있다.포위하여 체포하다
본고에서 나는 복합조작이 GitHub 작업 흐름을 더욱 작은 소비 가능한 구성 요소로 분해하는 데 어떻게 도움을 주는지 설명하고 이렇게 하는 장점을 설명했다.
당신은 업무 중에 방대한 업무 절차를 처리하고 있습니까? 아니면 이미 복합 동작을 사용하고 있습니까?아래의 평론에서 저에게 알려주세요.
만약 이 문장이 너에게 도움이 된다면, 어떠한 반응도 하지 마라.
읽어주셔서 감사합니다!
Reference
이 문제에 관하여(복합 GitHub 작업을 통해 워크플로우를 더 작고 재사용 가능), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jameswallis/using-github-composite-actions-to-make-your-workflows-smaller-and-more-reusable-476l텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)