2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Jenkinsを使って特定のブランチ+そのブランチからmasterへのPR作成を自動化した

Last updated at Posted at 2019-10-18

Personal access tokensの発行

下準備としてGitHub上でトークンを発行する必要がある。

  • GitHub「Personal access tokens」の設定方法
  • 権限はプライベートリポジトリのPR作成だったため、「repo」の権限を全部チェックした。
  • なお、トークンは自分のアカウントではなく、デプロイ用のユーザーアカウントで作成

シェル全体

  1. release/[Y-m-d]という名前のブランチをつくる
  2. 空コミットしてプッシュする
  3. PRを作成する
RELEASE_DAY=`date "+%Y-%m-%d"`
RELEASE_BRANCH="release/${RELEASE_DAY}"

# ブランチ作成
git branch -D ${RELEASE_BRANCH}
git checkout master
git pull origin master
git checkout -b ${RELEASE_BRANCH}
git reset --hard origin/master
git commit --allow-empty -m "${RELEASE_DAY}リリース分"
git push -u  origin ${RELEASE_BRANCH}

# PR作成
TOKEN="tokendayo"
BODY="## コメント見出し\n https:\/\/github.com\/organizationName\/projectName\/pulls?utf8=✓&q=is:pr+base:release\/${RELEASE_DAY}"
JSON="{\"title\": \"${RELEASE_DAY}リリース分\", \"head\": \"organizationName:release/${RELEASE_DAY}\", \"base\": \"master\", \"body\": \"${BODY}\" }"

curl -H 'Content-Type:application/json' -H "Authorization: token ${TOKEN}" \
     "https://api.github.com/repos/organizationName/repositoryName/pulls" \
     -d "${JSON}"

ブランチ作成

  • 「ソースコード管理」のセクションでgitリポジトリを紐付けておく
  • gitコマンドでmasterを最新にした上でブランチ作成
  • すでに同名ブランチがある場合は作成に失敗するため、作る前にブランチ削除を実行
  • 現在の運用上、同じ日に2回以上同名のブランチを作る(=1日に2回以上実行する)ことがあるので、空コミット前にmasterと同じ状態に揃える。
  • 空コミットしてプッシュする
RELEASE_DAY=`date "+%Y-%m-%d"`
RELEASE_BRANCH="release/${RELEASE_DAY}"

git branch -D ${RELEASE_BRANCH}
git checkout master
git pull origin master
git checkout -b ${RELEASE_BRANCH}
git reset --hard origin/master
git commit --allow-empty -m "${RELEASE_DAY}リリース分"
git push -u  origin ${RELEASE_BRANCH}

PR作成

  • curlを使ってPR作成
  • 最初に発行したtokenはここで使う
  • GitHubAPIを叩くだけ
  • 自動作成したブランチに対してマージされたorPR中のものを一覧するためのリンクも生成している
  • JSONについて
  • title: PRのタイトル
  • head: PRを出すブランチ名
  • base: マージ先のブランチ名(master)
  • body: PRに表示されるコメント(markdown)
  • JSON内に変数を使う場合はご覧の通りエスケープを頑張る必要がある
TOKEN="tokendayo"
BODY="## コメント見出し\n https:\/\/github.com\/organizationName\/projectName\/pulls?utf8=✓&q=is:pr+base:release\/${RELEASE_DAY}"
JSON="{\"title\": \"${RELEASE_DAY}リリース分\", \"head\": \"organizationName:release/${RELEASE_DAY}\", \"base\": \"master\", \"body\": \"${BODY}\" }"

curl -H 'Content-Type:application/json' -H "Authorization: token ${TOKEN}" \
     "https://api.github.com/repos/organizationName/repositoryName/pulls" \
     -d "${JSON}"

備考

  • PRを作る所はシェルを使わずにやる方法もいろいろあった
  • git操作は普通にgitコマンド使うのが手軽

参考

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?