LoginSignup
4

More than 5 years have passed since last update.

GitHubのタグに連動して、.NETStandard1.6のNugetパッケージを自動リリースする。

Last updated at Posted at 2017-10-13

TL;DR

.NET Standard1.6ベースでNugetパッケージを作っています。GitHubでリリースしたとき(git tagをプッシュしたとき)、自動的にnuget.org上のパッケージが更新されるようにしました。

---------------------------PRや通常のプッシュをトリガーにビルドしたとき
Uploading artifacts...
[1/1] Budougumi0617.Testable.0.0.5.nupkg (5,100 bytes)...100%
"NuGet" deployment has been skipped as environment variable has not matched ("appveyor_repo_tag" is "false", should be "true")
Build success

---------------------------タグをトリガーにビルドしたとき
Uploading artifacts...
[1/1] Budougumi0617.Testable.0.0.5.nupkg (5,101 bytes)...100%
Deploying using NuGet provider
Publishing Budougumi0617.Testable.0.0.5.nupkg to https://www.nuget.org/api/v2/package...OK
Total packages published: 1
Build success

実際に利用しているリポジトリは以下になります。

budougumi0617.Testable

NuGet version
Build status
codecov

関連ツールや対象プロジェクトについて

用途 ツール名
構成管理 GitHub
自動ビルド/自動デプロイ AppVeyor
リリース対象のnupkg .NET Standard1.6Nugetプロジェクト

構築手順

継続的インテグレーション(自動ビルド、自動テスト)までは別途構築済みとします。
詳細は以下を参考にしてください。

.NET Standard1.6プロジェクトのCI環境を構築する。

リリースに関する設定

AppveyorはWindowsコンテナで実行できるCIツールです。
.NET系の開発で使うツールや設定はプリセッティング/標準サポートされています。

Nugetの公開も基本的に公式の手順の通りにやればOKです。

AppVeyor | Publishing to NuGet feed

リポジトリのルートディレクトリに、appveyor.ymlファイルを配置します。
以下はリリースに関わる関連設定の抜粋です。

Testable/appveyor.yml

image: Visual Studio 2017
configuration: Debug
# platform: Any CPU
build:
  publish_nuget: true
  project: Testable.sln
  verbosity: minimal

deploy:
- provider: NuGet
  api_key:
    # Use encrypt tool
    # https://ci.appveyor.com/tools/encrypt
    secure: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  artifact: /.*\.nupkg/
  on:
    appveyor_repo_tag: true

.NET Standard1.6プロジェクトの場合はビルドにVisual Studio2017を使う必要があります。platform: Any CPUを設定すると、成果物のパスの解決に失敗してしまうため、configurationのみ設定しています。

リリースするnupkgファイルをビルドする。

ビルドの設定の中でpublish_nuget: trueとしておくと、自動的にnuget.orgにアップロードするnupkgファイルが生成されます。

リリース時の認証に使うAPIキーを設定する。

nuget.orgにアカウントを作成済みならば、以下のページからAPIキーを作成できます。

Nuget Gallery| API Keys

リポジトリのymlに直接記載する場合は、Appveyor提供の暗号化ツールで暗号化してから使います。

AppVeyor | Encrypt configuration data

AppVeyorのGUI画面から環境変数として登録しておき、、env:NUGET_KEYなどのように呼んでも良いです。

tagがプッシュされたときだけリリースする。

tagがプッシュされたときだけdeployを実行するにはappveyor_repo_tag: trueを設定します。公式の説明は以下です。

AppVeyor | Build on tags (GitHub, GitLab and BitBucket only)

以上でGitHubにタグがプッシュされたときだけ、nuget.orgにパッケージがリリースされるようになりました。

---------------------------PRや通常のプッシュをトリガーにビルドしたとき
Uploading artifacts...
[1/1] Budougumi0617.Testable.0.0.5.nupkg (5,100 bytes)...100%
"NuGet" deployment has been skipped as environment variable has not matched ("appveyor_repo_tag" is "false", should be "true")
Build success

---------------------------タグをトリガーにビルドしたとき
Uploading artifacts...
[1/1] Budougumi0617.Testable.0.0.5.nupkg (5,101 bytes)...100%
Deploying using NuGet provider
Publishing Budougumi0617.Testable.0.0.5.nupkg to https://www.nuget.org/api/v2/package...OK
Total packages published: 1
Build success

参考文献

2017年 .NET Core 1.x (Visual Studio 2017) プロジェクト向け AppVeyor での自動ビルドの設定

AppVeyor | Build pipeline

AppVeyor | Publishing to NuGet feed

AppVeyor | Build on tags (GitHub, GitLab and BitBucket only)

※この記事は自分のブログからの転載です。

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
4