{"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/tutorials/use-containerized-services/create-a-docker-container-action)을(를) 참조하세요.\n* 단계 또는 작업을 다시 사용하고 커뮤니티와 공유할 수 있습니다.\n\n자세한 내용은 [GitHub Actions에 대한 이해](/ko/actions/get-started/understand-github-actions)을(를) 참조하세요.\n\n## 주요 차이점\n\n* Jenkins에는 파이프라인을 만들기 위한 두 가지 유형의 구문인 선언적 파이프라인과 스크립팅된 파이프라인이 있습니다.\n  GitHub Actions 에서는 YAML을 사용하여 워크플로 및 구성 파일을 만듭니다. 자세한 내용은 [GitHub Actions에 대한 워크플로 구문](/ko/actions/reference/workflows-and-actions/workflow-syntax)을(를) 참조하세요.\n* Jenkins 배포는 일반적으로 자체 호스팅되며 사용자는 자체 데이터 센터에서 서버를 유지 관리합니다.\n  GitHub Actions는 작업 실행에 사용할 수 있는 자체 실행기를 제공하는 동시에 자체 호스팅 실행기도 지원하여 하이브리드 클라우드 방식을 제공합니다. 자세한 내용은 [자체 호스팅 실행기](/ko/actions/concepts/runners/self-hosted-runners)을(를) 참조하세요.\n\n## 기능 비교\n\n### 빌드 배포\n\nJenkins를 통해 단일 빌드 에이전트에 빌드를 보내거나 여러 에이전트에 배포할 수 있습니다. 운영 체제 유형과 같은 다양한 특성에 따라 에이전트를 분류할 수도 있습니다.\n\n마찬가지로 GitHub Actions는 작업을 GitHub 호스팅 또는 자체 호스팅 실행기로 보낼 수 있으며, 레이블을 사용하여 다양한 특성에 따라 실행기를 분류할 수 있습니다. 자세한 내용은 [GitHub Actions에 대한 이해](/ko/actions/get-started/understand-github-actions#runners) 및 [자체 호스팅 실행기](/ko/actions/concepts/runners/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/reference/workflows-and-actions/workflow-syntax#jobsjob_idruns-on) <br> [`jobs.<job_id>.container`](/ko/actions/reference/workflows-and-actions/workflow-syntax#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/reference/workflows-and-actions/workflow-syntax#jobs)                                                                                                                                                 |\n| [`steps`](https://jenkins.io/doc/book/pipeline/syntax/#steps)   | [`jobs.<job_id>.steps`](/ko/actions/reference/workflows-and-actions/workflow-syntax#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/reference/workflows-and-actions/workflow-syntax#env) <br> [`jobs.<job_id>.steps[*].env`](/ko/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstepsenv)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |\n| [`options`](https://jenkins.io/doc/book/pipeline/syntax/#options)                                                  | [`jobs.<job_id>.strategy`](/ko/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstrategy) <br> [`jobs.<job_id>.strategy.fail-fast`](/ko/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstrategyfail-fast) <br> [`jobs.<job_id>.timeout-minutes`](/ko/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idtimeout-minutes)                                                                                                                                                                                                                                                                                                                       |\n| [`parameters`](https://jenkins.io/doc/book/pipeline/syntax/#options)                                               | [`inputs`](/ko/actions/reference/workflows-and-actions/metadata-syntax#inputs) <br> [`outputs`](/ko/actions/reference/workflows-and-actions/metadata-syntax#outputs-for-docker-container-and-javascript-actions)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |\n| [`triggers`](https://jenkins.io/doc/book/pipeline/syntax/#triggers)                                                | [`on`](/ko/actions/reference/workflows-and-actions/workflow-syntax#on) <br> [`on.<event_name>.types`](/ko/actions/reference/workflows-and-actions/workflow-syntax#onevent_nametypes) <br> [<code>on.\\<push>.\\<branches\\|tags></code>](/ko/actions/reference/workflows-and-actions/workflow-syntax#onpushbranchestagsbranches-ignoretags-ignore) <br> [<code>on.\\<pull\\_request>.\\<branches></code>](/ko/actions/reference/workflows-and-actions/workflow-syntax#onpull_requestpull_request_targetbranchesbranches-ignore) <br> [<code>on.\\<push\\|pull\\_request>.paths</code>](/ko/actions/reference/workflows-and-actions/workflow-syntax#onpushpull_requestpull_request_targetpathspaths-ignore) |\n| [`triggers { upstreamprojects() }`](https://jenkins.io/doc/book/pipeline/syntax/#triggers)                         | [`jobs.<job_id>.needs`](/ko/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idneeds)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |\n| [Jenkins cron syntax](https://jenkins.io/doc/book/pipeline/syntax/#cron-syntax)(Jenkins cron 구문)                   | [`on.schedule`](/ko/actions/reference/workflows-and-actions/workflow-syntax#onschedule)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |\n| [`stage`](https://jenkins.io/doc/book/pipeline/syntax/#stage)                                                      | [`jobs.<job_id>`](/ko/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_id) <br> [`jobs.<job_id>.name`](/ko/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idname)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |\n| [`tools`](https://jenkins.io/doc/book/pipeline/syntax/#tools)                                                      |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |\n| \\[                                                                                                                 |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |\n| GitHub-호스팅 러너의 사양]\\(/actions/concepts/runners/github-hosted-runners#preinstalled-software-for-github-owned-images) |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |\n| [`input`](https://jenkins.io/doc/book/pipeline/syntax/#input)                                                      | [`inputs`](/ko/actions/reference/workflows-and-actions/metadata-syntax#inputs)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |\n| [`when`](https://jenkins.io/doc/book/pipeline/syntax/#when)                                                        | [`jobs.<job_id>.if`](/ko/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idif)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |\n\n## 순차 스테이지 사용\n\n### 병렬 작업 처리\n\nJenkins는 병렬로 `stages``steps` 실행할 수 있습니다.\nGitHub Actions 는 작업을 병렬로 실행하고 단계 수준 구문을 사용하여 작업 내에서 동시에 단계를 실행할 수도 있습니다. 자세한 내용은 [GitHub Actions에 대한 워크플로 구문](/ko/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstepsbackground)을 참조하세요.\n\n| Jenkins 병렬처리                                                        | GitHub Actions                                                                                                                      |\n| ------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |\n| [`parallel`](https://jenkins.io/doc/book/pipeline/syntax/#parallel) | [`jobs.<job_id>.strategy.max-parallel`](/ko/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstrategymax-parallel) |\n\n### 행렬\n\n둘 다 GitHub Actions 와 Jenkins를 사용하면 행렬을 사용하여 다양한 시스템 조합을 정의할 수 있습니다.\n\n| Jenkins                                                                  | GitHub Actions                                                                                                                                                                                      |\n| ------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| [`axis`](https://jenkins.io/doc/book/pipeline/syntax/#matrix-axes)       | [`strategy/matrix`](/ko/actions/how-tos/write-workflows/choose-what-workflows-do/run-job-variations#about-matrix-strategies) <br> [`context`](/ko/actions/reference/workflows-and-actions/contexts) |\n| [`stages`](https://jenkins.io/doc/book/pipeline/syntax/#matrix-stages)   | [`steps-context`](/ko/actions/reference/workflows-and-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/reference/workflows-and-actions/workflow-syntax#jobsjob_idsteps) |\n\n## 일반 작업의 예\n\n### `cron`을 사용하여 파이프라인을 실행하도록 예약하기\n\n#### `cron`을(를) 사용한 Jenkins 파이프라인\n\n```yaml\npipeline {\n  agent any\n  triggers {\n    cron('H/15 * * * 1-5')\n  }\n}\n```\n\n#### GitHub Actions`cron`을 사용하는 워크플로\n\n```yaml\non:\n  schedule:\n    - cron: '*/15 * * * 1-5'\n```\n\n`schedule` 이벤트 및 허용되는 Cron 구문에 대한 자세한 내용은 [워크플로를 트리거하는 이벤트](/ko/actions/reference/workflows-and-actions/events-that-trigger-workflows#schedule)을(를) 참조하세요.\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@v7\n        with:\n          node-version: 20\n      - run: npm install -g bats\n      - run: bats tests\n        working-directory: ./scripts/myapp\n```"}