{"meta":{"title":"Jenkins에서 GitHub Actions 마이그레이션","intro":"GitHub Actions 및 Jenkins는 여러 유사성을 공유하므로 GitHub Actions로 마이그레이션하는 것이 비교적 간단합니다.","product":"GitHub Actions","breadcrumbs":[{"href":"/ko/actions","title":"GitHub Actions"},{"href":"/ko/actions/tutorials","title":"자습서"},{"href":"/ko/actions/tutorials/migrate-to-github-actions","title":"GitHub Actions로 마이그레이션"},{"href":"/ko/actions/tutorials/migrate-to-github-actions/manual-migrations","title":"수동 마이그레이션"},{"href":"/ko/actions/tutorials/migrate-to-github-actions/manual-migrations/migrate-from-jenkins","title":"Jenkins에서 마이그레이션"}],"documentType":"article"},"body":"# Jenkins에서 GitHub Actions 마이그레이션\n\nGitHub Actions 및 Jenkins는 여러 유사성을 공유하므로 GitHub Actions로 마이그레이션하는 것이 비교적 간단합니다.\n\n## 소개\n\nJenkins 및 GitHub Actions를 사용하면 코드를 자동으로 빌드, 테스트, 게시, 릴리스 및 배포하는 워크플로를 만들 수 있습니다. Jenkins 및 GitHub Actions는 워크플로 구성에서 몇 가지 유사점을 공유합니다.\n\n* Jenkins는 GitHub Actions 워크플로 파일과 유사한 \\_선언적 파이프라인\\_을 사용하여 워크플로를 만듭니다.\n* Jenkins는 \\_스테이지\\_를 사용하여 단계의 컬렉션을 실행하는 반면, GitHub Actions은(는) 작업을 사용하여 하나 이상의 단계 또는 개별 명령을 그룹화합니다.\n* Jenkins 및 GitHub Actions는 컨테이너 기반 빌드를 지원합니다. 자세한 내용은 [Docker 컨테이너 작업 만들기](/ko/actions/creating-actions/creating-a-docker-container-action)을(를) 참조하세요.\n* 단계 또는 작업을 다시 사용하고 커뮤니티와 공유할 수 있습니다.\n\n자세한 내용은 [GitHub Actions에 대한 이해](/ko/actions/learn-github-actions/understanding-github-actions)을(를) 참조하세요.\n\n## 주요 차이점\n\n* Jenkins에는 파이프라인을 만들기 위한 두 가지 유형의 구문인 선언적 파이프라인과 스크립팅된 파이프라인이 있습니다. GitHub Actions는 YAML을 사용하여 워크플로 및 구성 파일을 만듭니다. 자세한 내용은 [GitHub Actions에 대한 워크플로 구문](/ko/actions/using-workflows/workflow-syntax-for-github-actions)을(를) 참조하세요.\n* Jenkins 배포는 일반적으로 자체 호스팅되며 사용자는 자체 데이터 센터에서 서버를 유지 관리합니다. GitHub Actions는 자체 호스팅 실행기를 지원하는 동시에, 작업을 실행하는 데 사용할 수 있는 자체 실행기를 호스팅하여 하이브리드 클라우드 접근 방식을 제공합니다. 자세한 내용은 [자체 호스팅 실행기](/ko/actions/hosting-your-own-runners/managing-self-hosted-runners/about-self-hosted-runners)을(를) 참조하세요.\n\n## 기능 비교\n\n### 빌드 배포\n\nJenkins를 통해 단일 빌드 에이전트에 빌드를 보내거나 여러 에이전트에 배포할 수 있습니다. 운영 체제 유형과 같은 다양한 특성에 따라 에이전트를 분류할 수도 있습니다.\n\n마찬가지로 GitHub Actions는 GitHub 호스팅 또는 자체 호스팅 실행기로 작업을 보낼 수 있으며, 레이블을 사용하여 다양한 특성에 따라 실행기를 분류할 수 있습니다. 자세한 내용은 [GitHub Actions에 대한 이해](/ko/actions/learn-github-actions/understanding-github-actions#runners) 및 [자체 호스팅 실행기](/ko/actions/hosting-your-own-runners/managing-self-hosted-runners/about-self-hosted-runners)을(를) 참조하세요.\n\n### 섹션을 사용하여 파이프라인을 구성하기\n\nJenkins는 선언적 파이프라인을 여러 섹션으로 분할합니다. 마찬가지로 GitHub Actions는 워크플로를 별도의 섹션으로 구성합니다. 아래 표에서는 Jenkins 섹션을 GitHub Actions 워크플로와 비교합니다.\n\n| Jenkins 지시문                                                     | GitHub Actions                                                                                                                                                                                                                   |\n| --------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| [`agent`](https://jenkins.io/doc/book/pipeline/syntax/#agent)   | [`jobs.<job_id>.runs-on`](/ko/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idruns-on) <br> [`jobs.<job_id>.container`](/ko/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idcontainer) |\n| [`post`](https://jenkins.io/doc/book/pipeline/syntax/#post)     | None                                                                                                                                                                                                                             |\n| [`stages`](https://jenkins.io/doc/book/pipeline/syntax/#stages) | [`jobs`](/ko/actions/using-workflows/workflow-syntax-for-github-actions#jobs)                                                                                                                                                    |\n| [`steps`](https://jenkins.io/doc/book/pipeline/syntax/#steps)   | [`jobs.<job_id>.steps`](/ko/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idsteps)                                                                                                                          |\n\n## Using 지시문\n\nJenkins는 지시문을 사용하여 \\_선언적 파이프라인\\_을 관리합니다. 지시문은 워크플로의 특성 및 실행 방법을 정의합니다. 아래 표에서는 이 지시문이 GitHub Actions의 개념에 매핑되는 방법을 보여 줍니다.\n\n| Jenkins 지시문                                                                                      | GitHub Actions                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |\n| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| [`environment`](https://jenkins.io/doc/book/pipeline/syntax/#environment)                        | [`jobs.<job_id>.env`](/ko/actions/using-workflows/workflow-syntax-for-github-actions#env) <br> [`jobs.<job_id>.steps[*].env`](/ko/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsenv)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |\n| [`options`](https://jenkins.io/doc/book/pipeline/syntax/#options)                                | [`jobs.<job_id>.strategy`](/ko/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstrategy) <br> [`jobs.<job_id>.strategy.fail-fast`](/ko/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstrategyfail-fast) <br> [`jobs.<job_id>.timeout-minutes`](/ko/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idtimeout-minutes)                                                                                                                                                                                                                                                                                                                                                                                                                    |\n| [`parameters`](https://jenkins.io/doc/book/pipeline/syntax/#options)                             | [`inputs`](/ko/actions/creating-actions/metadata-syntax-for-github-actions#inputs) <br> [`outputs`](/ko/actions/creating-actions/metadata-syntax-for-github-actions#outputs-for-docker-container-and-javascript-actions)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |\n| [`triggers`](https://jenkins.io/doc/book/pipeline/syntax/#triggers)                              | [`on`](/ko/actions/using-workflows/workflow-syntax-for-github-actions#on) <br> [`on.<event_name>.types`](/ko/actions/using-workflows/workflow-syntax-for-github-actions#onevent_nametypes) <br> [<code>on.\\<push>.\\<branches\\|tags></code>](/ko/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#onpushbranchestagsbranches-ignoretags-ignore) <br> [<code>on.\\<pull\\_request>.\\<branches></code>](/ko/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#onpull_requestpull_request_targetbranchesbranches-ignore) <br> [<code>on.\\<push\\|pull\\_request>.paths</code>](/ko/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#onpushpull_requestpull_request_targetpathspaths-ignore) |\n| [`triggers { upstreamprojects() }`](https://jenkins.io/doc/book/pipeline/syntax/#triggers)       | [`jobs.<job_id>.needs`](/ko/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idneeds)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |\n| [Jenkins cron syntax](https://jenkins.io/doc/book/pipeline/syntax/#cron-syntax)(Jenkins cron 구문) | [`on.schedule`](/ko/actions/using-workflows/workflow-syntax-for-github-actions#onschedule)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |\n| [`stage`](https://jenkins.io/doc/book/pipeline/syntax/#stage)                                    | [`jobs.<job_id>`](/ko/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_id) <br> [`jobs.<job_id>.name`](/ko/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idname)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |\n| [`tools`](https://jenkins.io/doc/book/pipeline/syntax/#tools)                                    |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |\n\n```\n          [GitHub 호스팅 러너에 대한 사양](/actions/using-github-hosted-runners/about-github-hosted-runners#supported-software) |\n```\n\n\\| [`input`](https://jenkins.io/doc/book/pipeline/syntax/#input)                              | [`inputs`](/ko/actions/creating-actions/metadata-syntax-for-github-actions#inputs) |\n\\| [`when`](https://jenkins.io/doc/book/pipeline/syntax/#when)                                | [`jobs.<job_id>.if`](/ko/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idif) |\n\n## 순차 스테이지 사용\n\n### 병렬 작업 처리\n\nJenkins는 `stages` 및 `steps`를 병렬로 실행할 수 있지만 현재 GitHub Actions는 병렬로만 작업을 실행합니다.\n\n| Jenkins 병렬처리                                                        | GitHub Actions                                                                                                                         |\n| ------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |\n| [`parallel`](https://jenkins.io/doc/book/pipeline/syntax/#parallel) | [`jobs.<job_id>.strategy.max-parallel`](/ko/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstrategymax-parallel) |\n\n### 행렬\n\nGitHub Actions 및 Jenkins 모두 매트릭스를 사용하여 다양한 시스템 조합을 정의할 수 있습니다.\n\n| Jenkins                                                                  | GitHub Actions                                                                                                                                    |\n| ------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------- |\n| [`axis`](https://jenkins.io/doc/book/pipeline/syntax/#matrix-axes)       | [`strategy/matrix`](/ko/actions/using-workflows/about-workflows#using-a-build-matrix) <br> [`context`](/ko/actions/learn-github-actions/contexts) |\n| [`stages`](https://jenkins.io/doc/book/pipeline/syntax/#matrix-stages)   | [`steps-context`](/ko/actions/learn-github-actions/contexts#steps-context)                                                                        |\n| [`excludes`](https://jenkins.io/doc/book/pipeline/syntax/#matrix-stages) | None                                                                                                                                              |\n\n### 단계를 사용하여 작업 실행\n\nJenkins는 `steps`를 `stages`에서 그룹화합니다. 각 단계는 스크립트, 함수 또는 명령일 수 있습니다. 마찬가지로 GitHub Actions는 `jobs`를 사용하여 `steps`의 특정 그룹을 실행합니다.\n\n| Jenkins                                                       | GitHub Actions                                                                                          |\n| ------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |\n| [`steps`](https://jenkins.io/doc/book/pipeline/syntax/#steps) | [`jobs.<job_id>.steps`](/ko/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idsteps) |\n\n## 일반 작업의 예\n\n###\n\n```\n          `cron`을 사용하여 파이프라인을 실행하도록 예약하기\n```\n\n####\n\n```\n          `cron`을(를) 사용한 Jenkins 파이프라인\n```\n\n```yaml\npipeline {\n  agent any\n  triggers {\n    cron('H/15 * * * 1-5')\n  }\n}\n```\n\n####\n\n```\n          `cron`을 사용하는 GitHub Actions 워크플로\n```\n\n```yaml\non:\n  schedule:\n    - cron: '*/15 * * * 1-5'\n```\n\n```\n          `schedule` 이벤트 및 허용되는 Cron 구문에 대한 자세한 내용은 [AUTOTITLE](/actions/reference/workflows-and-actions/events-that-trigger-workflows#schedule)을(를) 참조하세요.\n```\n\n### 파이프라인에서 환경 변수 구성\n\n#### Jenkins 파이프라인과 환경 변수\n\n```yaml\npipeline {\n  agent any\n  environment {\n    MAVEN_PATH = '/usr/local/maven'\n  }\n}\n```\n\n#### 환경 변수를 포함하는 GitHub Actions 워크플로\n\n```yaml\njobs:\n  maven-build:\n    env:\n      MAVEN_PATH: '/usr/local/maven'\n```\n\n### 업스트림 프로젝트에서 빌드하기\n\n#### 업스트림 프로젝트에서 빌드되는 Jenkins 파이프라인\n\n```yaml\npipeline {\n  triggers {\n    upstream(\n      upstreamProjects: 'job1,job2',\n      threshold: hudson.model.Result.SUCCESS\n    )\n  }\n}\n```\n\n#### 업스트림 프로젝트에서 빌드되는 GitHub Actions 워크플로\n\n```yaml\njobs:\n  job1:\n  job2:\n    needs: job1\n  job3:\n    needs: [job1, job2]\n```\n\n### 여러 운영 체제를 사용하여 빌드하기\n\n#### 여러 운영 체제로 빌드되는 Jenkins 파이프라인\n\n```yaml\npipeline {\n  agent none\n  stages {\n    stage('Run Tests') {\n      matrix {\n        axes {\n          axis {\n            name: 'PLATFORM'\n            values: 'macos', 'linux'\n          }\n        }\n        agent { label \"${PLATFORM}\" }\n        stages {\n          stage('test') {\n            tools { nodejs \"node-20\" }\n            steps {\n              dir(\"scripts/myapp\") {\n                sh(script: \"npm install -g bats\")\n                sh(script: \"bats tests\")\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}\n```\n\n#### 여러 운영 체제를 사용하여 빌드되는 GitHub Actions 워크플로\n\n```yaml\nname: demo-workflow\non:\n  push:\njobs:\n  test:\n    runs-on: ${{ matrix.os }}\n    strategy:\n      fail-fast: false\n      matrix:\n        os: [macos-latest, ubuntu-latest]\n    steps:\n      - uses: actions/checkout@v6\n      - uses: actions/setup-node@v4\n        with:\n          node-version: 20\n      - run: npm install -g bats\n      - run: bats tests\n        working-directory: ./scripts/myapp\n```"}