작업 및 워크플로 관리

완료됨

여기서는 GitHub 작업 및 워크플로를 공유하고 엔터프라이즈 내에서의 사용을 관리하기 위해 GitHub Enterprise Cloud 및 GitHub Enterprise Server에서 사용할 수 있는 다양한 도구와 전략을 살펴봅니다.

콘텐츠는 제공되는 도구를 사용할 수 있는 수준(엔터프라이즈 수준 또는 조직 수준)을 중심으로 구성됩니다.

엔터프라이즈 수준

GitHub Actions 사용 정책 구성

GitHub Actions 워크플로에는 일반적으로 워크플로 내에서 실행할 독립 실행형 명령의 집합인 작업이 포함됩니다. 워크플로를 생성할 때, GitHub Marketplace에서 제공하는 공용 커뮤니티 작업을 사용하거나 참조할 수 있는 사용자 고유 작업을 생성할 수 있습니다. 이러한 이유로 기업의 워크플로 및 작업에 대한 사용 정책을 구성하는 것은 사용자가 악의적인 타사 작업을 사용하지 못하도록 하는 데 필수적입니다.

엔터프라이즈 설정에서 GitHub Connect를 사용하도록 설정된 경우, Enterprise Cloud 및 Enterprise Server에서 정책을 구성하기 위한 여러 옵션이 있습니다.

엔터프라이즈에 대해 GitHub Actions를 구성하려면, 엔터프라이즈 계정으로 이동한 다음, 사이드바에서 정책 > 작업으로 이동합니다. 다음 옵션이 표시됩니다.

기본 옵션이 선택된 작업 화면의 스크린샷

모든 조직에서 사용이라는 맨 위에 있는 드롭다운에서 GitHub Actions를 사용할 수 있는 엔터프라이즈의 조직(모두, 일부, 모두 사용 안함)을 결정하고, 아래 세 가지 옵션을 사용하여 이러한 조직 내에서 GitHub Actions의 제한 수준을 정의할 수 있습니다.

엔터프라이즈 내에서 특정 작업만 사용하도록 설정하려면 엔터프라이즈 허용, 엔터프라이즈가 아닌 작업 및 재사용 가능한 워크플로 선택을 선택하고 사용 사례에 해당하는 옵션을 선택합니다.

선택 작업 허용 옵션이 선택된 작업 화면의 스크린샷

수동으로 Enterprise Server에 대한 공용 작업 동기화

GitHub에서 작성된 대부분의 공식 작업은 Enterprise Server와 함께 자동으로 제공되며, GitHub Marketplace에서 특정 시점에 캡처됩니다. 여기에는 actions/checkout, actions/upload-artifact, actions/download-artifact, actions/labeler 및 다양한 actions/setup- 작업이 포함됩니다. 엔터프라이즈 인스턴스에 포함된 모든 공식 작업을 받으려면, 인스턴스의 작업 조직 https://HOSTNAME/actions.로 이동합니다.

GitHub Actions 사용 정책 구성 섹션에서 언급한 대로, GitHub Marketplace에서 사용할 수 있는 공용 작업에 자동으로 액세스하도록 Enterprise Server를 구성하고 해당 정책에 대한 사용 정책을 구성할 수 있습니다. 그러나, 엔터프라이즈에서 사용할 수 있어야 하는 공용 작업을 보다 강력하게 제어하려는 경우, actions-sync 도구를 사용하여 엔터프라이즈 인스턴스에 작업을 수동으로 다운로드하고 동기화 할 수 있습니다.

조직 수준

회사 표준 문서화

GitHub Actions 워크플로 만들기에는 여러 파일을 작성하고 워크플로 자체를 지정하는 여러 리포지토리를 만드는 작업이 포함되는 경우가 많습니다. 만들기에는 워크플로에서 사용할 작업, 컨테이너 및/또는 실행기도 포함됩니다. Enterprise Cloud 또는 Enterprise Server 인스턴스의 사용자 수에 따라, GitHub Actions 워크플로를 생성하기 위한 회사 표준이 없는 경우에는 작업이 쉽게 망가질 수 있습니다.

모범 사례로, 조직 내 모든 사용자가 액세스할 수 있는 리포지토리의 markdown 파일 또는 GitHub wiki에 다음을 문서화하는 것을 권장합니다.

  • 스토리지에 대한 리포지토리
  • 파일/폴더 명명 규칙
  • 공유 구성 요소의 위치
  • 지속적인 유지 관리 계획
  • 기여 지침

워크플로 템플릿 생성

워크플로 템플릿은 엔터프라이즈에서 자동화를 다시 사용하고 유지 관리할 수 있는 좋은 방법입니다. Enterprise Cloud와 Enterprise Server 모두에서 조직의 .github 리포지토리에 대한 쓰기 권한이 있는 사용자는 동일한 쓰기 액세스 권한이 있는 다른 조직의 구성원에게 사용할 수 있는 워크플로 템플릿을 만들 수 있습니다. 그런 다음 워크플로 템플릿을 사용하여 조직의 공용 및 개인 리포지토리에 새 워크플로를 생성할 수 있습니다.

워크플로 템플릿 생성은 다음 두 단계로 수행됩니다.

  1. yml 워크플로 파일을 만듭니다.

  2. 워크플로를 만들 때 템플릿을 사용자에게 표시하는 방법을 설명하는 json 메타데이터 파일을 만듭니다.

    참고

    메타데이터 파일의 이름은 워크플로 파일과 동일해야 합니다. .yml 확장명 대신 .properties.json을 추가해야 합니다. 예를 들어 octo-organization-ci.properties.json 파일에는 octo-organization-ci.yml 워크플로 파일에 대한 메타데이터가 포함됩니다.

두 파일은 모두 공용 .github 리포지토리 및 워크플로 템플릿이라는 디렉터리에 있어야 합니다. 조직에 아직 이들이 없는 경우, 생성해야 할 수도 있습니다.

다음은 기본 워크플로 파일의 예입니다.

name: Octo Organization CI

on:
  push:
    branches: [ $default-branch ]
  pull_request:
    branches: [ $default-branch ]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2

      - name: Run a one-line script
        run: echo Hello from Octo Organization

이전 파일에서는 $default-branch 자리 표시자를 사용하고 있습니다. 템플릿을 사용하여 워크플로를 생성할 때, 이 자리 표시자는 리포지토리의 기본 분기 이름으로 자동으로 대체됩니다.

다음은 워크플로 파일에 대해 생성하는 메타데이터 파일입니다.

{
    "name": "Octo Organization Workflow",
    "description": "Octo Organization CI workflow template.",
    "iconName": "example-icon",
    "categories": [
        "Go"
    ],
    "filePatterns": [
        "package.json$",
        "^Dockerfile",
        ".*\\.md$"
    ]
}

메타데이터 파일은 다음 매개 변수를 사용합니다.

매개 변수 설명 필수
이름 사용 가능한 템플릿 목록에 표시되는 워크플로 템플릿의 이름.
설명 사용 가능한 템플릿 목록에 표시되는 워크플로 템플릿에 대한 설명.
iconName 템플릿 목록에서 워크플로 항목의 아이콘을 정의합니다. 동일한 이름의 SVG 아이콘이어야 하며 워크플로 템플릿 디렉터리에 저장해야 합니다. 예를 들어 example-icon.svg SVG 파일은 예제 아이콘으로 참조됩니다. 아니요
categories 워크플로의 언어 범주를 정의합니다. 사용자가 사용 가능한 템플릿을 볼 때, 동일한 언어로 된 템플릿이 더 명확하게 기능합니다. 아니요
filePatterns 사용자 리포지토리의 루트 디렉터리에 정의된 정규식과 일치하는 파일이 있는 경우, 템플릿을 사용할 수 있도록 합니다. 아니요

워크플로 템플릿이 생성되면 조직의 사용자는 Actions > New workflow > Workflows created by _your_organization_name 아래에서 이를 찾을 수 있습니다.

워크플로 템플릿 예시.

작업 및 워크플로에 재사용 가능한 템플릿

GitHub Actions는 워크플로 자동화를 허용하며 워크플로를 효율적으로 관리하는 핵심 부분은 재사용 가능한 템플릿을 사용하는 것입니다. 재사용 가능한 템플릿은 여러 리포지토리에서 개발을 표준화하고 간소화하여 중복성을 줄이고 유지 관리를 개선하는 데 도움이 됩니다.

GitHub Actions에서 재사용 가능한 템플릿은 여러 프로젝트에서 참조 및 사용할 수 있는 미리 정의된 작업 및 워크플로 를 참조합니다. 일관성을 보장하고 엔터프라이즈 수준 표준을 준수합니다.

재사용 가능한 템플릿 유형

템플릿 유형 용도 예시
재사용 가능한 워크플로 리포지토리 간에 CI/CD 파이프라인을 표준화합니다. ci-pipeline.yml, deploy-app.yml
재사용 가능한 작업 일반적인 자동화 논리를 캡슐화합니다. setup-env-action, security-scan-action
워크플로 템플릿 재사용 가능한 작업 구조를 정의합니다. test-job.yml, build-job.yml

재사용 가능한 워크플로

재사용 가능한 워크플로는 여러 프로젝트에서 참조할 수 있는 별도의 리포지토리에 정의된 워크플로입니다. 이를 통해 조직은 CI/CD 논리를 중앙 집중화 할 수 있습니다.

재사용 가능한 워크플로의 구조

재사용 가능한 워크플로가 .github/workflows/에 저장되고 workflow_call 트리거를 사용합니다.

예: 표준화된 CI 워크플로(ci-pipeline.yml)

name: CI Pipeline
on:
  workflow_call:
    inputs:
      node-version:
        required: true
        type: string
    secrets:
      npm-token:
        required: true
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Set up Node.js
        uses: actions/setup-node@v3
        with:
          node-version: ${{ inputs.node-version }}
          registry-url: 'https://npm.pkg.github.com/'
      - name: Install Dependencies
        run: npm install
      - name: Run Tests
        run: npm test

다른 리포지토리에서 재사용 가능한 워크플로 사용

정의되면 키워드를 통해 모든 리포지토리에서 재사용 가능한 워크플로를 uses: 사용할 수 있습니다.

본보기: 재사용 가능한 워크플로 호출

name: Reusable CI Pipeline
on: push
jobs:
  test:
    uses: org/reusable-workflows/.github/workflows/ci-pipeline.yml@v1
    with:
      node-version: '16'
    secrets:
      npm-token: ${{ secrets.NPM_TOKEN }}

재사용 가능한 워크플로 사용의 이점

  • 모든 리포지토리가 동일한 CI/CD 구조를 따르도록 합니다.
  • 중복성 및 유지 관리 오버헤드를 줄입니다.
  • 각 리포지토리를 수정하지 않고 중앙 집중식 업데이트를 허용합니다.

재사용 가능한 작업

GitHub 작업은 특정 자동화 작업을 실행하는 모듈식 재사용 가능한 단위입니다. 조직에서는 자주 사용하는 논리를 캡슐화하는 사용자 지정 작업을 만드는 경우가 많습니다.

재사용 가능한 작업의 구조

재사용 가능한 작업은 파일이 있는 action.yml에 정의됩니다.

본보기: 사용자 지정 설정 환경 작업

name: "Setup Environment"
description: "Sets up Node.js and installs dependencies"
inputs:
  node-version:
    description: "Node.js version"
    required: true
  registry-url:
    description: "NPM Registry URL"
    required: false
    default: "https://registry.npmjs.org/"
runs:
  using: "node16"
  main: "index.js"

워크플로에서 재사용 가능한 작업 사용

모든 워크플로에서 설정 단계를 반복하는 대신 사용자 지정 작업을 사용합니다.

name: Build & Test
on: push
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Setup Environment
        uses: org/actions/setup-env@v1
        with:
          node-version: '16'

이점:

  • 리포지토리 전체에서 설치 논리의 중복을 줄입니다.
  • 워크플로 파일을 간소화하여 더 읽기 쉽게 만듭니다.
  • 업데이트를 중앙 집중화합니다. 즉, 한 곳에서 수정 또는 개선 사항이 모든 워크플로에 반영됩니다.

워크플로 템플릿

앞에서 설명한 것처럼 워크플로 템플릿은 일반적인 작업에 미리 정의된 구조를 제공하여 조직 전체의 자동화를 표준화하는 데 도움이 됩니다. 이러한 템플릿은 재사용 가능한 워크플로의 광범위한 범주의 핵심 부분입니다.

이전 섹션인 "워크플로 템플릿 만들기"에서는 yml 파일과 해당 .properties.json 메타데이터 파일에서 이러한 템플릿을 빌드하는 방법을 설명했습니다.

개념을 더 연결하기 위해 워크플로 템플릿은 재사용 가능한 워크플로의 한 형태입니다. 디렉터리 아래 .github 의 공용 workflow-templates/ 리포지토리에 만들고 저장할 때 다른 조직 구성원은 처음부터 정의하지 않고도 리포지토리에 대한 일관된 워크플로를 만들 수 있습니다.

기업은 워크플로 템플릿을 활용하여 다음을 수행할 수 있습니다.

  • 리포지토리 전체에서 모범 사례를 적용합니다.
  • 새 프로젝트에 대한 온보딩 및 설정을 가속화합니다.
  • CI/CD 프로세스에서 일관성을 유지합니다.