Werckerを使ってGithubへのreleaseとJarアップロードを自動化する
やること
SpringBootでプロジェクトを開発する際に共通で使う機能などをライブラリ化して参照できるようにしたい。
プロジェクトの依存関係で解決してもいいですが、共通ライブラリが肥大化するような場合だとローカルビルドが面倒なので今回はJar化したものを配布することにします。
Wercker設定ファイルの編集
前回の続きから
公式ドキュメントにリリースとアップロードの手順があるのでこれを参考にします。
GitHub - wercker/step-github-create-release: wercker step for deploying to GitHub releases
GitHub - wercker/step-github-upload-asset: A wercker step for adding an asset to a GitHub release.
wercker.yml に以下のdeployワークフローを追加します。
deploy: steps: - script: name: get version code: | VERSION=`grep ^version build.gradle | awk -F\' '{print $2}'` - github-create-release: token: $GITHUB_TOKEN tag: $VERSION - github-upload-asset: token: $GITHUB_TOKEN file: build/libs/appname-${VERSION}.jar content-type: application/zip
Jarの名前はbuild.gradleから設定できるので以下をbuild.gradleに追加してください。
versionは適当にbuild.gradleからgrepしてます。
jar.baseName = 'appname' version = '0.0.1-SNAPSHOT'
Weckerの設定変更
Pipeline追加
WebページへログインしワークフローのメニューからAdd New Pipelineを選択します。
YML Pipeline nameにwercker.ymlで設定したdeployを入力してcreateを押します。
ワークフローに先ほど追加したdeployを繋げます。
Githubトークンの取得
WerckerからGithubへpushするのにGithubトークンが必要なので作成します。
GithubのWebページへ行って以下のリンクで設定画面を開きます。
Settings→Developer settings→Personal access tokens
Generate new tokenを選択して、新規トークンを作成します。
今回はpublicレポジトリを使うのでpublic_repoのみにチェックをいれます。
トークンが生成されたらコピーしておきます。
Githubトークン設定
Environmentのページを開いてValueに先ほどコピーしたトークンを設定します。
keyはGITHUB_TOKENとしてください。
Wercker実行確認
最初に設定したwercker.ymlをPUSHすると自動的にweckerも実行されます。
deployのpipelineが正常に実行され、githubのreleasesにJarがアップロードされていれば成功です。
参照側プロジェクトの設定
build.gradleに以下を追加
def urlFile = { url, name -> File file = new File("$buildDir/libs/${name}.jar") file.parentFile.mkdirs() if (!file.exists()) { new URL(url).withInputStream { downloadStream -> file.withOutputStream { fileOut -> fileOut << downloadStream } } } files(file.absolutePath) } dependencies { compile urlFile('https://github.com/nakanoya150151/siw/releases/download/0.0.1/siw-0.0.1-SNAPSHOT.jar?raw=true', 'siw') }
とりあえずこれで連携できますが、Mavenレポジトリを立てたほうがきれいですね。。。
Jar化も含めてやってくれるWebサービスもあるようです。
上のjitpackを紹介していた記事
JitPack.ioでGitHub上のJavaプロジェクトを簡単にライブラリとして参照する · tehepero note(・ω<) 2.0
課題
毎回のPUSHでreleasesを作成しようとしてしまうので制御できるように修正予定です。。。