星期四, 4月 24, 2014

Jenkins 又一難題:LDAP

為了讓 Jenkins 的使用者由 LDAP 接 AD 驗證,參考別人的設定硬是不行。因為每一家的 LDAP 有什麼內容都不會一樣,所以這題也解很久:原來雖然驗證通過了,但後來找使用者所屬群組(其實似乎沒必要)出問題,會導致丟給 acegisecurity 的驗證物件是空的,不過並沒有拋出例外,只有驗證失敗的結果,乍看起來與密碼打錯沒什麼不同,但一直追到很細的記錄才看出些端倪。有圖為證:
其實當初也不懂這有什麼異常,不過先是區分出密碼打錯絕不是長這樣,再苦思、狂搜,最後靈感來自於,狀況類似,多設一個群組的搜尋起點就解決了。

[2019/04/09]
沒想到改用 Single-Sign On 後的多年,還是有機會需要這篇,而且補上兩點:
  • 當 Jenkins 安裝在很舊的 Windows 上,中文可能不是 UTF-8,當做任何欄位設定內容都可能出錯,要儘量避免,例如 Manager DN 就可改為電子郵件格式。
  • 即使沒用到群組,不設群組的相關條件也可能造成問題,可以考慮至少要放個純英文的條件,找不到任何群組也無妨。

星期二, 4月 22, 2014

Jenkins OpenCover

在整合這兩個東西時,以下的問題大概卡了快兩天:
路徑要確實搞懂,可以先在 Visual Studio 利用 Post-Build 單獨先搞清楚 OpenCover、NUnit 的關係,再搬到 Jenkins 一步步比對。
網路上有人提過要安裝 Visual C++ 2010 Redistributable,不過對我在 Windows Server 2008 R2 上的 Jenkins 沒有作用。
最後終於找到解法:Jenkins 服務的帳戶要改成本機的系統管理員,權限夠就過了。

[2015/06/08]
正解有兩種做法:
  • Jenkins 服務的帳戶要被賦予系統管理權限
  • 以系統管理權限在 OpenCover.Console.exe 所在目錄執行 regsvr32 x86\OpenCover.Profiler.dll 或 regsvr32 x64\OpenCover.Profiler.dll

來源出自於這篇文章

星期四, 4月 17, 2014

取得伺服器的加密憑證

openssl s_client -connect hostname:port 2>&1 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > filename

在 Mac 遠端桌面連線到另一部 Windows 電腦

首先要釐清一點:有兩個微軟出的應用程式,「Remote Desktop Connection Client for Mac」和「Microsoft Remote Desktop」,他們是不同的。前者已經是舊物了,後者有在 Mac App Store 上架,推薦使用。
第一次使用 Microsoft Remote Desktop 遇到個算嚴重的問題,分享 Mac 的目錄竟然不會出現在 Windows 檔案總管?原來分享的名稱是有關係的,Desktop 不行,myDesktop 就可以。

星期二, 4月 15, 2014

查詢 NuGet 套件的所有可下載版本

在 Visual Studio 2010 以後,使用 NuGet 做為套件管理是比較好的做法。但官網上永遠只有一個穩定版,頂多再一個預先釋出版,有時候是不符現實需求的。其實這種一加一的版本限制只在圖形介面,若使用 Package Manager Console 下指令還是可以突破的。不過以下這招實測無效,曾有人回報過是官網的問題:

Get-Package -ListAvailable -Filter <keyword> -AllVersions

以下這個是目前可行的變通做法:

Install-Package <PackageId> -Version〔空格〕〔定位鍵〕

如果只是查詢不要安裝,最後不要按 Enter 就好了。

[2014/08/12]

過去實測無效的指令,如今試來是可以的。

IIS 7.5 虛擬帳戶問題

IIS 7.5 以後,預設使用 ApplicationPoolIdentity 這個身分執行應用程式集區。有許多文章提到將實體目錄授權給這個身分的方法:
  1. 在檔案總管對該目錄按右鍵,選「Properties」、「Security」、「Edit」、「Add」。
  2. 確認「Locations」的內容是本機電腦名稱。
  3. 假設應用程式集區名稱是 DefaultAppPool,在文字方塊內輸入 IIS AppPool\DefaultAppPool,再按「Check Names」,如果名稱解析成功,會有底線。
  4. 賦予讀取權限。
以上都完成後,還是有可能看不到網頁,此時請檢查:
  1. 伺服器、應用程式集區、網站等是否啟動。
  2. 網址不完整時,是否有匹配的預設文件。
  3. 如果接受匿名驗證,匿名使用者對應的身分是否就是 ApplicationPoolIdentity。