다른 리포지토리에 자동으로 푸시하는 Github 작업
4482 단어 blogging
다른 리포지토리에 자동으로 푸시하는 Github 작업
콘텐츠를 다른 저장소로 자동으로 푸시하기 위해 일부 저장소가 필요했던 적이 있습니까?
이에 대한 몇 가지 이유가 있을 수 있습니다. 아마도 주 저장소가 아직 공유할 수 없거나 일부 콘텐츠를 다른 저장소에서 제외하고 싶을 수 있습니다. 개인 및 부분적으로 공개됩니다.
최근에 Medium에 게시물을 쓰기 시작했기 때문에 게시물을 더 나은 방식으로 정리하고 싶을 때 그렇게 할 필요가 있었습니다. 게시물 작성 생활을 편하게 하기 위해 Brian Mayo
의 Githubaction를 사용하여 게시물을 Medium에 자동으로 게시했습니다. Markdown 형식으로 포스트를 작성하고 Github에 푸시하기만 하면 됩니다. 블로그 저장소는 게시물에 사용된 샘플 코드의 저장 공간 역할도 하므로 항상 공개적으로 사용할 수 있습니다.
그럼에도 불구하고 게시물의 일부가 미디엄 회원만 액세스할 수 있는 날이 올 수 있다는 것을 깨달았을 때 게시물에 사용된 코드를 공개적으로 사용할 수 있도록 하면서 콘텐츠를 별도의 저장소에 비공개로 유지해야 했습니다. git submodule, 암호화된 마크다운을 고려한 후 현재 블로그 저장소(게시물과 코드가 모두 포함된)를 비공개로 유지하고 공유 코드만 다른 공용 저장소로 내보내는 추가 Github 작업을 수행하기로 결정했습니다.
그때 Carles Pina Estany
에서 Github action가 사례에 유용하다는 것을 알았습니다.
더 잘 설명하기 위해 사용 사례를 모방하기 위해 mock-medium-source 및 mock-medium-output을 만들었습니다.
mock-medium-source
에서 파일 구조는 다음과 같습니다.
├── .github
│ ├── workflows
│ │ ├── medium-publish.yml
├── posts
│ ├── 001
│ │ ├── files
│ │ │ ├── Makefile
│ │ │ ├── mock.cpp
│ │ ├── post1.md
│ ├── 002
│ │ ├── files
│ │ │ ├── Makefile
│ │ ├── note.txt
│ │ ├── post2.md
├── README.md
Medium의 게시물은 .md
파일에서 생성되며 posts/<number>
의 나머지 콘텐츠는 게시물에 대한 참조 코드 또는 정보입니다.
따라서 비공개로 유지해야 하는 것은 마크다운 파일이 될 것입니다. 게시물의 내용이 없으면 공유 코드가 덜 의미가 있을 것이기 때문입니다. Github Gist은 코드와 스니펫을 공유하는 데 널리 사용되는 방법이지만 현재로서는 코드를 쉽게 컴파일하고 실행하기 위해 코드를 Makefile
또는 CMakeLists.txt
와 함께 한 곳에 보관하는 것을 선호합니다. 나는 mock-medium-source
를 푸시하기 전에 mock-medium-output
에서 해당 개인 콘텐츠를 필터링하기 위해 멋진 작업을 사용하지 않았습니다. 현재는 다른 리포지토리로 푸시하기 전에 해당 마크다운 파일을 간단히 삭제하는 것입니다.
mock-medium-output
저장소의 예상 파일 구조는
├── posts
│ ├── 001
│ │ ├── files
│ │ │ ├── Makefile
│ │ │ ├── mock.cpp
│ ├── 002
│ │ ├── files
│ │ │ ├── Makefile
│ │ ├── note.txt
mock-medium-source
의 Github 워크플로에 대한 yaml 파일은 다음과 같습니다(SSH_DEPLOY_KEY
에 대한 비밀을 생성해야 함).
name: Publish to Medium
"on":
push:
branches:
- master
paths:
- 'posts/**'
jobs:
post:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Creates output folder and remove markdown
run: |
mkdir output
rm -rf posts/*/*.md
cp -r posts output
- name: Pushes to public repository
id: push_directory
uses: cpina/github-action-push-to-another-repository@ssh-deploy-key
env:
SSH_DEPLOY_KEY: ${{ secrets.WORKFLOW_DEPLOY_KEY }}
with:
source-directory: output/
destination-github-username: 'pllee4-Experimental'
destination-repository-name: 'mock-medium-output'
user-email: [email protected]
commit-message: pushed from $GITHUB_REF
target-branch: master
이 yaml 파일의 경우 기록해야 할 두 가지 사항이 있습니다.
├── .github
│ ├── workflows
│ │ ├── medium-publish.yml
├── posts
│ ├── 001
│ │ ├── files
│ │ │ ├── Makefile
│ │ │ ├── mock.cpp
│ │ ├── post1.md
│ ├── 002
│ │ ├── files
│ │ │ ├── Makefile
│ │ ├── note.txt
│ │ ├── post2.md
├── README.md
├── posts
│ ├── 001
│ │ ├── files
│ │ │ ├── Makefile
│ │ │ ├── mock.cpp
│ ├── 002
│ │ ├── files
│ │ │ ├── Makefile
│ │ ├── note.txt
name: Publish to Medium
"on":
push:
branches:
- master
paths:
- 'posts/**'
jobs:
post:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Creates output folder and remove markdown
run: |
mkdir output
rm -rf posts/*/*.md
cp -r posts output
- name: Pushes to public repository
id: push_directory
uses: cpina/github-action-push-to-another-repository@ssh-deploy-key
env:
SSH_DEPLOY_KEY: ${{ secrets.WORKFLOW_DEPLOY_KEY }}
with:
source-directory: output/
destination-github-username: 'pllee4-Experimental'
destination-repository-name: 'mock-medium-output'
user-email: [email protected]
commit-message: pushed from $GITHUB_REF
target-branch: master
mock-medium-output
를 생성해야 mock-medium-source
에서 푸시할 수 있습니다.("작성"은 소스 리포지토리의 대상 분기로 유효한 분기를 갖기 위해 최소 하나의 커밋으로 푸시됨을 의미합니다.)
posts/**
입니다. 즉, mock-medium-source
의 워크플로 실행은 posts
아래의 디렉터리에 변경 사항이 있는 경우에만 트리거됩니다. 이것은 내 사용법에 적합하지만 원하는 경우 이 부분을 제거할 수 있습니다. 그게 다야! Markdown 형식을 사용하여 게시물을 계속 작성할 수 있으며 워크플로에서 관련 공개 콘텐츠를 자동으로 푸시하여 귀하와 공유하도록 할 수 있습니다!
감사합니다. 도움이 되었기를 바랍니다.
Reference
이 문제에 관하여(다른 리포지토리에 자동으로 푸시하는 Github 작업), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/pllee4/github-action-to-automatically-push-to-another-repository-2cc6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)