CircleCI에서 hub 명령을 활용해 보았습니다.
9036 단어 GitHub허브CircleCIpullrequestGit
TL;DR
이 기사를 읽으면 한 리포지토리에서 출력되는 출력을 다른 리포지토리에 반영하는 풀 요청을 자동으로 만들 수 있습니다.
리포지토리 간에 종속성이 있거나 사용법을 찾을 수 있습니다.
1. 했던 일
A 리포지토리에서 수정하고, Pull Request가 master 브랜치에 병합된 후 webpack 하고, B 리포지토리에 반영하는 Pull Request를 매번 수동으로 실시하는 것이 상당히 번거로움. 가끔 B리포지토리에 반영하는 것을 잊고, 저기...같은 사태에 빠지기 쉽다.
CircleCI가 master 브랜치에 병합될 때마다 괜찮게 해준다.
2. hub 명령을 CircleCI로 해결합니다.
hub 명령이란?
허브 명령은 GitHub에서 제공하는 명령줄 도구입니다. git 명령을 확장하여 GitHub의 다양한 기능을 사용할 수 있습니다.
이번에는 hub 명령 ( v2.13.0 )을 사용하여 CLI에서 풀 요청을 만듭니다.
3. 실행 절차
Pull Request를 작성하기 위한 쉘 스크립트 작성
c 희귀 테이프 - 퀘스트 st. sh
#!/bin/bash
set -ex
LOCAL_REPO=path/to/some_repo
REMOTE_REPO=organization/some_repo
COPY_FROM=path/to/copy_from
COPY_TO=path/to/copy_to
NEW_BRANCH=some_branch_name
COMMIT_HASH="$(echo $CIRCLE_SHA1 | cut -c -7)"
PR_TEMPLATE=$HOME/target/.github/CIRCLECI_PULL_REQUEST_TEMPLATE.md
# install hub command
wget https://github.com/github/hub/releases/download/v$HUB_VER/hub-linux-amd64-2.13.0.tgz
tar zvxvf hub-linux-amd64-2.13.0.tgz
sudo ./hub-linux-amd64-2.13.0/install
rm -rf hub-linux-amd64-2.13.0
# git clone
mkdir -p $REPO_DIR
hub clone $REPO_LOCATION $REPO_DIR
# 反映したい内容をコピー
cp -fp $COPY_FROM $COPY_TO
# git configの設定
git config --global user.email "[email protected]"
git config --global user.name "circleci"
# 反映したい内容をCommit
cd $REPO_DIR
git checkout -b $NEW_BRANCH
git add . && git commit -m "update for $COMMIT_HASH"
# Pull Request Templateを編集
## 作成するPull RequestのタイトルにCommit Hashを付ける
sed -ie "s/hoge$/hoge($COMMIT_HASH)/" $PR_TEMPLATE
## 作成するPull Requestの内容に作成元のPull Requestを紐付ける
echo -e "$CIRCLE_PULL_REQUEST" >> $PR_TEMPLATE
# Pull Requestを作成
hub pull-request -F $PR_TEMPLATE -b develop -p
쉘 스크립트는 실행 권한을 부여하는 것을 잊지 마십시오.
RC ぇし_ぷっ l_레쿠에 ST_로 MP. md
update: for hoge
## Reference pull request
hoge
는 쉘 스크립트에서 hoge(commit_hash)
로 대체되어 템플릿의 행 끝에 CircleCI 실행 대상 Pull Request URL을 추가합니다.
CircleCI에 쉘 스크립트 포함
config.yml (CircleCI)
이 문서의 대상인 config.yml의 일부를 발췌하여 아래에 설명합니다.
version: 2
references:
## branch filters
filter_only_master: &filter_only_master
branches:
only:
- /^master/
jobs:
create_pull_request:
docker:
- image: some-docker-image
steps:
- checkout
- run:
name: create pull request
command: ./.circleci/create-pull-request.sh
workflows:
version: 2
build_and_deploy:
jobs:
- create_pull_request:
filters: *filter_only_master
4. 조금 고생한 곳
hub pull-request 명령은 처음 실행할 때 username과 password를 다음과 같이 묻습니다.
$ hub pull-request -F PULL_REQUEST_TEMPLATE.md
github.com username:
github.com password for user (never stored):
two-factor authentication code:
이 문제를 해결하기 위해 다음을 수행하여 해결할 수있었습니다.
Pull Request를 작성하기 위한 쉘 스크립트 작성
c 희귀 테이프 - 퀘스트 st. sh
#!/bin/bash
set -ex
LOCAL_REPO=path/to/some_repo
REMOTE_REPO=organization/some_repo
COPY_FROM=path/to/copy_from
COPY_TO=path/to/copy_to
NEW_BRANCH=some_branch_name
COMMIT_HASH="$(echo $CIRCLE_SHA1 | cut -c -7)"
PR_TEMPLATE=$HOME/target/.github/CIRCLECI_PULL_REQUEST_TEMPLATE.md
# install hub command
wget https://github.com/github/hub/releases/download/v$HUB_VER/hub-linux-amd64-2.13.0.tgz
tar zvxvf hub-linux-amd64-2.13.0.tgz
sudo ./hub-linux-amd64-2.13.0/install
rm -rf hub-linux-amd64-2.13.0
# git clone
mkdir -p $REPO_DIR
hub clone $REPO_LOCATION $REPO_DIR
# 反映したい内容をコピー
cp -fp $COPY_FROM $COPY_TO
# git configの設定
git config --global user.email "[email protected]"
git config --global user.name "circleci"
# 反映したい内容をCommit
cd $REPO_DIR
git checkout -b $NEW_BRANCH
git add . && git commit -m "update for $COMMIT_HASH"
# Pull Request Templateを編集
## 作成するPull RequestのタイトルにCommit Hashを付ける
sed -ie "s/hoge$/hoge($COMMIT_HASH)/" $PR_TEMPLATE
## 作成するPull Requestの内容に作成元のPull Requestを紐付ける
echo -e "$CIRCLE_PULL_REQUEST" >> $PR_TEMPLATE
# Pull Requestを作成
hub pull-request -F $PR_TEMPLATE -b develop -p
쉘 스크립트는 실행 권한을 부여하는 것을 잊지 마십시오.
RC ぇし_ぷっ l_레쿠에 ST_로 MP. md
update: for hoge
## Reference pull request
hoge
는 쉘 스크립트에서 hoge(commit_hash)
로 대체되어 템플릿의 행 끝에 CircleCI 실행 대상 Pull Request URL을 추가합니다.CircleCI에 쉘 스크립트 포함
config.yml (CircleCI)
이 문서의 대상인 config.yml의 일부를 발췌하여 아래에 설명합니다.
version: 2
references:
## branch filters
filter_only_master: &filter_only_master
branches:
only:
- /^master/
jobs:
create_pull_request:
docker:
- image: some-docker-image
steps:
- checkout
- run:
name: create pull request
command: ./.circleci/create-pull-request.sh
workflows:
version: 2
build_and_deploy:
jobs:
- create_pull_request:
filters: *filter_only_master
4. 조금 고생한 곳
hub pull-request 명령은 처음 실행할 때 username과 password를 다음과 같이 묻습니다.
$ hub pull-request -F PULL_REQUEST_TEMPLATE.md
github.com username:
github.com password for user (never stored):
two-factor authentication code:
이 문제를 해결하기 위해 다음을 수행하여 해결할 수있었습니다.
$ hub pull-request -F PULL_REQUEST_TEMPLATE.md
github.com username:
github.com password for user (never stored):
two-factor authentication code:
GITHUB_USER
및 OAUTH_TOKEN
추가 cat << EOF > ~/.config/hub
github.com:
- user: $GITHUB_USER
oauth_token: $OAUTH_TOKEN
protocol: https
EOF
chmod 600 ~/.config/hub
이것은,
hub pull-request
명령을 최초로 실행했을 때에 생성되는 것을 수동으로 작성한 것입니다만, 쉘 스크립트에 쓰는 것은 조금 까다롭습니다. . . 라고 생각했으므로, 좀 더 조사해 보면 이하와 같은 기술을 발견했습니다.$ man hub
:(snip)
CONFIGURATION
GitHub OAuth authentication
Hub will prompt for GitHub username password the first time it needs to access the API and exchange it for an OAuth token, which it saves in ~/.config/hub.
To avoid being prompted, use GITHUB_USER and GITHUB_PASSWORD environment variables.
Alternatively, you may provide GITHUB_TOKEN, an access token with repo permissions. This will not be written to ~/.config/hub.
:(snip)
과연. . . 그래서 궁극적으로 다음을 수행하여 해결했습니다.
GITHUB_TOKEN
추가 이제 처음 실행할 때 username 과 password 를 듣지 않고
hub pull-request
를 실행할 수 있었습니다.5. 궁리한 곳
Pull Request간의 대응 관계를 알기 쉽게 하기 위해서 이하를 실시했습니다.
6. 앞으로 하고 싶은 일
7. 정리
이번에는 CircleCI와 hub 명령의 일부를 사용해 보았습니다만, 사용법에 따라서는 여러가지 유연하게 할 수 있을 것 같다는 느낌이었습니다. 그 밖에도 사용 장면이 있을 것 같기 때문에 사용해 가려고 생각합니다.
이상!
Reference
이 문제에 관하여(CircleCI에서 hub 명령을 활용해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/uedaeita/items/a43a1b8df2ed800c512b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(CircleCI에서 hub 명령을 활용해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/uedaeita/items/a43a1b8df2ed800c512b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)