리포지토리 B를 수정하는 동안 리포지토리 A를 변경하시겠습니까? Github 작업은 여기

5813 단어 gitgithub
지난 주 직장에서 작업 저장소에 일부 파일을 푸시(또는 끌어오기 요청을 통해 병합)한 후 일부 파일을 다른 저장소에 복제해야 하는 아이디어가 있었습니다.

예는 다음과 같습니다.



보시다시피 저는 새 복사본이나 기존 복사본의 수정 사항이 푸시될 때마다 파일 '파일'이 리포지토리 B에 복제되기를 원했습니다.

그래서 이 문제에 Github Actions를 사용하기로 했습니다. Github Actions는 Github 이벤트에서 무언가를 할 수 있는 도구를 제공합니다. 우리의 경우 이벤트는 내 저장소로 푸시입니다.

Github 작업에서는 프로젝트 경로의 ./github/workflows 폴더에 .yaml 파일을 생성하기만 하면 됩니다. 단계를 통해 '작업'을 나누어 다음 접근 방식을 취하기로 결정했습니다.

푸시


ProjectA 및 ProjectB 복제


ProjectA에서 ProjectB로 파일을 복제하고 ProjectB로 푸시합니다.


Push -> Clone ProjectA -> Clone ProjectB -> Copy from ProjectA the file and paste it in ProjectB -> Commit and Push on ProjectB


.yaml 파일을 살펴보겠습니다.

on: push

jobs:
    replicate-file:
        runs-on: ubuntu-latest
        name: Replicate File

        steps:
        - name: Checkout Project A
          uses: actions/checkout@v2
          with:
            path: ./projectA

        - name: Checkout Project B
          uses: actions/checkout@master
          with: 
            repository: tomassirio/projectB
            token: ${{ secrets.ACTIONS_TOKEN }}
            path: ./projectB

        - name: Copy/Create file
          run: |
            FILE=./projectA/file
            if [ -f "$FILE" ]; then
              echo "Copying $FILE"
              cp -R ./projectA/file ./projectB
            else 
              echo "Creating $FILE"
              touch ./projectB/file
            fi

        - name: Push Project B
          run: |
            cd ./projectB
            git add .
            git config user.name github-actions
            git config user.email [email protected]
            git commit -am "File Replicated from Project A"
            git push


Github Actions의 기술적 측면에 관심이 없다면 건너뛸 수 있는 것



보시다시피. 기본 .yaml 파일입니다. 첫 번째 줄은 작업을 트리거할 이벤트를 결정합니다. 다음으로 작업을 정의합니다(모듈화할 수 있음). 그런 다음 각 작업에서 작업이 수행할 단계를 정의합니다.

이 경우 우분투 컨테이너 생성을 요청합니다. 해당 컨테이너의 ./projectA 경로에서 projectA 리포지토리를 체크아웃하고 ./projectB 경로에서 projectB 리포지토리를 복제합니다. 중요 Github에서 PAT(개인 액세스 토큰)를 정의하고 PAT를 값으로 사용하여 projectA 리포지토리에 비밀을 생성해야 합니다.

세 번째와 네 번째 단계는 거의 자명합니다. 파일이 존재하면 projectA에서 projectB로 복사하고, 존재하지 않으면(어떤 이유로든) projectB에 파일을 생성합니다. 마지막으로 git con projectB를 사용하여 파일을 푸시합니다.

동작 확인



마지막으로 이벤트가 트리거되면 Github가 뒤에서 어떻게 작동하는지 확인하고 싶을 것입니다. 따라서 Github의 Actions 탭으로 이동하여 워크플로가 올바르게 형식화된 경우(손가락 교차) 다음과 같은 창이 표시됩니다.



물론 파일이 projectB 리포지토리에 복제되었는지 확인하고 싶을 것입니다(물론 아무도 그들의 솔루션이 처음 100번에서 작동한다고 믿지 않기 때문입니다)



하지만 이번에는 내 것이 :D

확인하고 복제하고 가지고 놀고 싶다면 여기에 리포지토리를 남겨 두겠습니다.

Project A

Project B

좋은 웹페이지 즐겨찾기