社内用NugetServerを立てて社内ライブラリを管理する

社内で使うライブラリをもっと整理して使いやすくしようということで、社内にNuGetのサーバーを立ててみました。
そもそもNuGetのパッケージも作ったことなかったのでちょうど良かったですが、まだ全然調べていません。
まずは、NuGetサーバーを立てて、NuGetパッケージを作って、登録するところまでです。

NuGet.Serverの構築

非常に簡単です。

  1. Create New ASP.NET Empty Project
  2. Install-Packatge NuGet.Server
  3. F5

これで問題なければ、社内のIISにホスティングします。
必要であれば設定ファイルのAPIKEYを指定します。

ちなみに、NuGetパッケージには、デバッグシンボルとソースを含んだシンボルパッケージというのもあるようですが、それはこのNuGet.ServerにはPUSHできないようです。
次の記事を参考にすればできるようになりそうです(試してない)

NuGet Packageの作成

ざっくりと。

  • nuget spec でNuGetパッケージのプロジェクトファイルを作成し、
  • nuget pack でパッケージ化して、
  • nuget push {Package file name} -s {url} {API_KEY} でNuGetServerにプッシュする。

urlにはNuGet.Serverをブラウザで開いたときに表示されているURLを入力すればOKです。

あとは使うだけ

あとは、VisualStudioのオプションからNuGetサーバーのソースを追加して使うだけです。
自分たちのライブラリがNuGetの画面に出てくると、なんとなくうれしい感じがします・w・

参考

「エントリ ‘(データベース接続文字列)’ は既に追加されています。」と表示されデータベースに接続できませんでした。

ASP.NETのプロジェクトをデバッグするとき、IIS Expressを使って動作を確認していたのですが、「エントリ ‘(データベース接続文字列)’ は既に追加されています。」というメッセージが出てデータベースに接続できなくなりました。

原因は、実行時のURLとして、 http://localhost:64509/app/ としていたところ、親ディレクトリ側(http://localhost:64509)にあるweb.configとappにあるweb.configに記述した、connectionStringと競合していたようです。

対応としては、プロジェクトごとにURLを変えればよさそうだったのですが、変えてビルドしただけだとうまくいかなかったので、IIS Expressの構成ファイルを修正したところなおりました。

ターゲット “MSDeployPublish” はプロジェクト内に存在しません。

.NET でAzure Websitesの発行のプレビューしたらエラーになった。

[code]
ターゲット "MSDeployPublish" はプロジェクト内に存在しません。
[/code]

何が効いたのかいまいちはっきりしないけど、プロジェクトファイルのコレを

[code]
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v12.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
[/code]

こうしたら

[code]
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v12.0\WebApplications\Microsoft.WebApplication.targets" />
[/code]

なおった。

現象としては以下とおなじで、ちゃんとImportしないとだめよってことだよね。

teamcity – Where is MsDeployPublish located? – Stack Overflow

アプリケーション開始前の初期化段階では呼び出すことができません。

.Net MVC で認証をちょっと変更しようとMembershipProviderを作ってたらエラー。

アプリケーション開始前の初期化段階では呼び出すことができません。

ふむふむ・・・・・・・・・・・

結局わからず、日本語を適当に英語にして検索してstackoverflow様。

ASP.NET: This method cannot be called during the application's pre-start initialization stage – Stack Overflow

[code language=”xml”]
<add key="enableSimpleMembership" value="false"/>
<add key="autoFormsAuthentication" value="false"/>
[/code]

Visual Studio 2012からの発行ができない

ASP.NET、MVC、AngularJSで色々と書いていて、それじゃ発行してみるかー、と発行してみたら、

The “ImportParametersFile” task failed unexpectedly. の日本語版

のエラーがでて発行できません。

現象は Azure SDK 2.3 – can't deploy と同じだと思うのですが、Azure SDKをアンインストールしたり、VS2012を修復したり、Microsoft.Web.XmlTransforms.dllを持ってきたりしても発行できませんでした。

結局、Visual Studio 2013だと大丈夫という書き込みがあったのと、2012を使わないといけない制約もなかったので、2013に乗り換えちゃいました。

そのうちアップデートか対処法がわかったら、VS2012の方でも発行できるようにしよう・・・

JenkinsでWindows Slaveを使いbitbucketのgitリポジトリを取得してビルドする。

Windows Server 2012にjenkins slaveを動かし、asp.net mvcのプロジェクトをbitbucketのプライベートリポジトリから取得して、ビルド、テスト、azure websitesにデプロイしてみる。

ロジェクトを発行してazureにデプロイできる前提です。

1. ノードの追加
=========================
jenkinsはlinuxサーバー上にあるので、ノードの管理>新規ノード作成からwindows server 2012のサーバーを追加

* JNLP経由でスレーブを起動するよう設定
* ここのツールの設定は設定しなかった。

2. jenkinsのシステム設定
=========================
jenkinsの設定>システムの設定>Gitに対象のサーバー用のgitを追加。

:Name: git
:Path to Git executable: C:/Program Files (x86)/Git/cmd/git.cmd

git.cmdの中身はこんな感じ
[powershell]
@echo off
set HOME=C:\Users\Administrator
set PATH=C:\Program Files (x86)\Git\bin;%PATH%
git %*
[/powershell]

このjenkinsのスレーブはAdministratorで動かすので、HOMEにC:\Users\Administratorを設定する。
C:\Users\Administrator\.sshを作って、ssh-keygenで鍵を作り、公開鍵をbitbucketに登録する。

3. ジョブの追加
=========================
ジョブを追加して設定を開く

ソースコード管理: Git
—————————
* Repositories: git@bitbucket.org:xxxxx/yyyyyyy.git
* Credentials: なし
* Git executable: 2で追加したgit

ビルド・トリガ
—————————
* SCMをポーリング: H/15 * * * *

ビルド
—————————
ビルド->テスト->デプロイのイメージ。全部Windowsのバッチ処理。

1. restore nuget packages
ビルドするときにも復元してくれるけど、先にやらないとビルドが成功しない・・・。放置。

.nuget\nuget.exe restore xxxxx.sln -ConfigFile -NonInteractive

2. ビルド

“C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe” xxxxx.sln /t:build /p:Configuration=”Release”

3. テスト

“C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe” xxxxx.unittests\bin\release\xxxxx.unittests.dll

4. デプロイ

“C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe” xxxxx.sln /p:DeployOnBuild=true /p:PublishProfile=”xxxxx” /p:Password=yyyyy /p:AllowUntrustedCertificate=true

:xxxxx: 発行のプロファイルの名前
:yyyyy: Azureから取得した発行プロファイルの中にあるパスワード

NuGet.exeでパッケージの復元でエラー
============================================
リモートサーバーに接続できないようなエラーがでていたので、確認してみるとファイアウォールに引っかかって失敗していました。
NuGet.exeの通信を許可するよう設定したところうまくいくようになった。

その他
===========
あとはメール通知をしたりして終わり。

そういえば
============
* MSBuildのプラグインがあったけど、以前はうまく動作させることができず、Windowsバッチにしていた。今度暇があれば試してみよう。
* VisualStudioOnlineってこういうことできるのかなぁ。
* デプロイしたサイトに対してseleniumを走らせて、問題なければプロダクション環境の切り替えがしたいなー。
* jenkinsの本を買おうかなぁ。こういうこと書いてるかなぁ・・・。