사용자 지정 변환기 정보
GitHub Actions Importer은(는) 사용자 지정 변환기를 만들어 기본 제공 매핑 확장 기능을 제공합니다. 사용자 지정 변환기를 사용하여 다음을 수행할 수 있습니다.
- GitHub Actions Importer이(가) 자동으로 변환하지 않는 항목을 변환하거나 항목이 변환되는 방식을 수정합니다. 자세한 내용은 "사용자 지정 항목 변환기 만들기"를 참조하세요.
- 다른 실행기 레이블을 사용하도록 참조를 실행기로 변환합니다. 자세한 내용은 "사용자 지정 실행기 변환기 만들기"를 참조하세요.
- 환경 변수 값을 기존 파이프라인에서 GitHub Actions 워크플로로 변환합니다. 자세한 내용은 "사용자 지정 환경 변수 변환기 만들기"를 참조하세요.
GitHub Actions Importer과(와) 사용자 지정 변환기 사용
사용자 지정 변환기에는 GitHub Actions Importer이(가) 플러그인, 작업, 실행기 레이블 또는 환경 변수를 변환하여 GitHub Actions에서 작업하도록 변환하는 데 사용할 수 있는 매핑 논리가 포함되어 있습니다. 사용자 지정 변환기는 Ruby를 기반으로 빌드된 DSL(도메인 특정 언어)로 작성되며 .rb
파일 확장명의 파일 내에 정의됩니다.
--custom-transformers
CLI 옵션을 사용하여 audit
, dry-run
, migrate
명령과 함께 사용할 사용자 지정 변환기 파일을 지정할 수 있습니다.
예를 들어 사용자 지정 변환기가 transformers.rb
이라는 이름의 파일에 정의된 경우, 다음 명령을 사용하여 GitHub Actions Importer와 함께 사용할 수 있습니다.
gh actions-importer ... --custom-transformers transformers.rb
또는 glob 패턴 구문을 사용하여 여러 사용자 지정 변환기 파일을 지정할 수 있습니다. 예를 들어 다중 사용자 지정 변환기가 transformers
이라는 이름의 디렉터리 내에 있는 경우, 다음 명령을 사용하여 모든 변환기를 GitHub Actions Importer에 제공할 수 있습니다.
gh actions-importer ... --custom-transformers transformers/*.rb
참고: 사용자 지정 변환기를 사용하는 경우, 사용자 지정 변환기 파일은 gh actions-importer
명령이 실행되는 동일한 디렉터리 또는 하위 디렉터리에 있어야 합니다.
항목에 대한 사용자 지정 변환기 만들기
GitHub Actions Importer에서 기존 빌드 단계 또는 트리거를 해당 항목으로 변환할 때 사용할 사용자 지정 변환기를 GitHub Actions에서 만들 수 있습니다. 이 기능은 다음과 같은 경우에 특히 유용합니다.
- GitHub Actions Importer이(가) 항목을 자동으로 변환하지 않습니다.
- GitHub Actions Importer에서 항목을 변환하는 방법을 변경하려고 합니다.
- 기존 파이프라인은 Jenkins의 공유 라이브러리와 같은 사용자 지정 또는 독점 확장을 사용하므로 GitHub Actions에서 이러한 단계가 작동하는 방식을 정의해야 합니다.
GitHub Actions Importer은(는) Ruby 위에 빌드된 DSL을 사용하여 정의된 사용자 지정 변환기를 사용합니다. 빌드 단계 및 트리거에 대한 사용자 지정 변환기를 만들려면 다음을 수행합니다.
- 각 사용자 지정 변환기 파일에는 하나 이상의
transform
메서드가 포함되어야 합니다. - 각
transform
메서드는 ,Hash
,Hash
의 array, 또는nil
을(를) 반환해야 합니다. 반환된 값은 YAML에 정의된 작업에 해당합니다. 작업에 대한 자세한 내용은 "GitHub Actions 이해"을(를) 참조하세요
빌드 단계에 대한 사용자 지정 변환기 예제
다음 예제에서는 "buildJavaScriptApp" 식별자를 사용하여 다양한 npm
명령을 실행하는 빌드 단계를 변환합니다.
transform "buildJavaScriptApp" do |item| command = ["build", "package", "deploy"].map do |script| "npm run #{script}" end { name: "build javascript app", run: command.join("\n") } end
transform "buildJavaScriptApp" do |item|
command = ["build", "package", "deploy"].map do |script|
"npm run #{script}"
end
{
name: "build javascript app",
run: command.join("\n")
}
end
위 예제의 결과는 다음 GitHub Actions 워크플로 단계입니다. 이 단계는 buildJavaScriptApp
식별자가 있는 변환된 빌드 단계로 구성됩니다.
- name: build javascript app
run: |
npm run build
npm run package
npm run deploy
이 transform
메서드는 인수에서 원본 CI/CD 인스턴스의 빌드 단계 식별자를 사용합니다. 이 예제에서 식별자는 buildJavaScriptLibrary
입니다. 쉼표로 구분된 값을 사용하여 transform
메서드에 여러 식별자를 전달할 수도 있습니다. 예들 들어 transform "buildJavaScriptApp", "buildTypeScriptApp" { |item| ... }
입니다.
참고: CI/CD 플랫폼 및 변환되는 항목의 유형에 따라 item
의 데이터 구조가 달라집니다.
실행기를 위한 사용자 지정 변환기 만들기
원본 CI/CD 인스턴스의 실행기와 해당 GitHub Actions 실행기 간의 매핑을 사용자 지정할 수 있습니다.
GitHub Actions Importer은(는) Ruby 위에 빌드된 DSL을 사용하여 정의된 사용자 지정 변환기를 사용합니다. 실행기에 대한 사용자 지정 변환기를 만드는 과정:
- 사용자 지정 변환기 파일에는 하나 이상의
runner
메서드가 포함되어야 합니다. runner
메서드는 다음의 두 매개 변수를 허용합니다. 첫 번째 매개 변수는 원본 CI/CD 인스턴스의 실행기 레이블이고, 두 번째 매개 변수는 해당 GitHub Actions 실행기 레이블입니다. GitHub Actions 실행기에 대한 자세한 내용은 "GitHub 호스팅 실행기 사용"을(를) 참조하세요.
실행기에 대한 사용자 지정 변환기 예제
다음 예제에서는 결과 워크플로에서 실행기 레이블을 GitHub Actions 실행기 레이블로 변환하는 runner
메서드를 보여줍니다.
runner "linux", "ubuntu-latest"
runner "linux", "ubuntu-latest"
runner
메서드를 사용하여 결과 워크플로에서 하나의 실행기 레이블을 여러 GitHub Actions 실행기 레이블로 변환할 수도 있습니다.
runner "big-agent", ["self-hosted", "xl", "linux"]
runner "big-agent", ["self-hosted", "xl", "linux"]
GitHub Actions Importer은(는) 실행기 레이블을 최대한 매핑하려고 시도합니다. 이 작업이 불가능한 경우, ubuntu-latest
실행기 레이블이 기본값으로 사용됩니다. runner
메서드와 함께 특수 키워드를 사용하여 이 기본값을 제어할 수 있습니다. 예를 들어 다음 사용자 지정 변환기는 ubuntu-latest
대신 GitHub Actions Importer을(를) 기본 실행기로 macos-latest
사용하도록 지시합니다.
runner :default, "macos-latest"
runner :default, "macos-latest"
사용자 지정 환경 변수 변환기 만들기
원본 CI/CD 파이프라인의 환경 변수 간 매핑을 GitHub Actions의 값으로 사용자 지정할 수 있습니다.
GitHub Actions Importer은(는) Ruby 위에 빌드된 DSL을 사용하여 정의된 사용자 지정 변환기를 사용합니다. 사용자 지정 환경 변수 변환기를 만드는 과정:
- 사용자 지정 변환기 파일에는 하나 이상의
env
메서드가 포함되어야 합니다. env
메서드는 다음의 두 매개 변수를 허용합니다. 첫 번째 매개 변수는 원래 파이프라인의 환경 변수 이름이며 두 번째 매개 변수는 GitHub Actions의 환경 변수의 업데이트된 값입니다. GitHub Actions에 대한 자세한 내용은 "변수에 정보 저장."을(를) 참조하세요.
사용자 지정 환경 변수 변환기 예제
사용자 지정 변환기를 설정하여 환경 변수를 매핑하는 데에는 여러 가지 방법이 있습니다.
-
다음 예제에서는 파이프라인 변환 시에
OCTO
이라는 명칭의 기존 환경 변수의 값을CAT
로 설정하고 있습니다.Ruby env "OCTO", "CAT"
env "OCTO", "CAT"
특정 환경 변수의 모든 인스턴스를 제거하여 GitHub Actions 워크플로로 변환되지 않도록 할 수도 있습니다. 다음 예제에서는
MONA_LISA
이라는 명칭의 모든 환경 변수를 제거합니다.Ruby env "MONA_LISA", nil
env "MONA_LISA", nil
-
기존 환경 변수를 비밀리에 매핑할 수도 있습니다. 예를 들어 다음
env
메서드는MONALISA
로 명명된 환경 변수를OCTOCAT
(으)로 명명된 비밀에 매핑합니다.Ruby env "MONALISA", secret("OCTOCAT")
env "MONALISA", secret("OCTOCAT")
이렇게 하면 변환된 워크플로에서
OCTOCAT
로 명명된 비밀에 대한 참조가 설정됩니다. 비밀이 작동하려면 GitHub 리포지토리에서 비밀을 만들어야 합니다. 자세한 내용은 "GitHub Actions에서 비밀 사용"을(를) 참조하세요. -
정규식을 사용하여 여러 환경 변수의 값을 한 번에 업데이트할 수도 있습니다. 예를 들어 다음 사용자 지정 변환기는 변환된 워크플로에서 모든 환경 변수를 제거합니다.
Ruby env /.*/, nil
env /.*/, nil
다음 예제에서는 정규식 일치 그룹을 사용하여 환경 변수 값을 동적으로 생성된 비밀로 변환합니다.
Ruby env /^(.+)_SSH_KEY/, secret("%s_SSH_KEY)
env /^(.+)_SSH_KEY/, secret("%s_SSH_KEY)
참고:
env
메서드가 정의된 순서는 정규식을 사용할 때 중요합니다. 환경 변수 이름과 일치하는 첫 번째env
변환기가 후속env
메서드보다 우선합니다. 가장 구체적인 환경 변수 변환기를 먼저 정의해야 합니다.
법적 고지
부분은 MIT 라이선스에 따라 https://github.com/github/gh-actions-importer/에서 조정되었습니다.
MIT License
Copyright (c) 2022 GitHub
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.