發表文章

Implement Redmine Project Menu Item Customize Setting with Plugin

圖片
主要是想試試看Redmine這類有時代背景的產品 是否因為Rails與本身設計的彈性 讓開發者易於修改、以及使用者客製化的維度等等 找了不少關鍵字,沒看到我想要的,於是就記錄一下~ 實作目標:讓各個專案管理者自行決定某個專案標籤是否顯示,而 非關閉 此功能 實作範圍:Plugin。不含既有非模組化的Menu item,如:概觀(Overview)、活動(Activity) 示範模組: Redmine Hearts Plugin Redmine原始碼參考  Mirror site 精要結果:修改hearts模組的 init.rb 即可 修改後的程式碼如下 menu :project_menu , :hearts , { :controller => :hearts , :action => :index }, :param => :project_id , :caption => :hearts_link_label , # 如果hearts模組在project是enable的,才產生此menu item :if => proc { |project| project.module_enabled? :hearts } # 在Project新增此模組的設定檔,也有權限限制,只有專案管理員可設定。 project_module :hearts do permission :hearts , { hearts: [ :index ] }, require: :member end 只需修改這樣,就可以達到上述客製化的設定,相當精美而且直覺 細部說明: 由於所有Redmine模組的init.rb都是透過Redmine::Plugin實作 與此次案例有關的程式碼為 menu 裡頭也引用到Redmine::MenuManager.map,會將Menu Item的資訊 存入 很明顯的,在這個步驟並沒有觸發 :if 判斷的Proc程式碼區段 那麼是在哪裡被啟用呢? 在  layouts/base.html.rb ,如果目前是在Project頁面 那麼就會呼叫 MenuManager的 render_main_menu 方法 在往

Simple gitlab CI/CD with docker

圖片
年初挑了bitbucket + jenkins作為docker內部簡易自動化建置與部署的設置 那時候由於jenkins是內網的服務,bitbucket沒辦法送webhook進來,無法實作pipeline 自建bitbucket也是可以,但有沒有一個服務是一條龍做完的呢?就是gitlab 由於gitlab community edition (簡稱gitlab-ce) 跟 gitlab-runner免費授權的緣故 成為現在許多企業內部專案管理與自動化建置、測試與部署的首選 以下會以 gitlab-ce  +  gitlab-runner 兩個docker image為基底,建置兩個容器服務 並拿 Angular 、免費網域靜態檔案放置服務 Surge 當實作目標,走過一遍gitlab CI/CD 整個架構圖如下: gitlab-ce 為整個專案程式碼管理服務與pipeline主控台 gitlab-runner 則是當pipeline啟動時,會根據gitlab特有的 gitlab-ci.yml 執行CI/CD gitlab-ce 每個專案會有一組自己的token,用以註冊gitlab-runner gitlab-runner註冊時,可以選擇執行方式(executor),我們選用docker gitlab-runner會另外開幾個container來pull code與執行CI/CD,最後push到surge上 前置作業: (1). 註冊好surge的帳戶與自定義的網域名稱 (2). 確認docker的記憶體要4gb ram以上 (開發環境為Docker for Mac) (3).  gitlabDocker  目錄,主要放置  docker-compose.yml (4).  testCICD  目錄,主要放置  Angular 與 gitlab-ci.yml (5). gitlab-ce版本:10.6.1 主要步驟有四: 撰寫docker-compose file,確認兩個服務之間可以正常連線 設定User、Group、Project,模擬一般專案合作使用狀況 設定 gitlab-ce pipeline,註冊runner Push Code & auto-run pipeline 除了2.以外,

Common Q&A of gitlab-ce

圖片
Q1. 能否保護特定branch不讓人Push? 可以,並可將使用者分成 五種權限 ,分別可以對CI/CD不同階段有不同的操作。 可以依Group設定對Group底下所有Repository的權限 亦可依每個Repository做設定,假設兩者都有設定了,會以比較高的為優先 e.g., Jimmy在Group的權限預設是Guest,在A repository是 Developer。 則在該Repository的權限即是Developer,可以PUSH到 Unprotected的 branch Q2. 能否有討論區 有接近需求的討論區(Issue),但畢竟是respositry based的,所以沒有獨立討論區 但每個repository都有一個Issue block可以討論 Q3. 能否有Webhook通知? 能,以 Slack 來說,可以依據想通知的事件(e.g., Push, Issue…etc) 發通知到Slack Mail的部分要另外設定SMTP,可以自架mail server(郵件伺服器) 亦可用外部或公司內部郵件伺服器服務 信件的通知,比較是走個人訂閱層面的;Webhook的用途比較像廣播 Q4. 上的Change如何link到Issue 透過Crosslinking Issue。 在Commit Message加上 #<該Issue編號> push上來,在gitlab瀏覽時會自動連結,如下 Q5. 能否像Gerrit Server Cherry-pick 一個change? 可以。程序是 先push到一個非target branch 從gitlab 操作介面對該change cherrypick 並發merge pull request過去 此時會產生一個cherry-pick-xxx的temporary branch,那筆change就在其上 Target branch的maintainer如果覺得OK就可以merge該cherry-pick-xxx branch

雙主線:網路服務容器化開發環境建置&CKAN - 廢鐵人30天歷程

廢鐵人終於結束拉XDDDD 以自己的FB為入口,大致上可以分成以下四類 基於Docker的Web Service協同開發環境建置 [Day 6] Angular 部署於 WildFly [Day 9] Docker Container 檔案共享 [Day 10] Jenkins初探 [Day 12] 繞過Jenkins的Setup Wizard與預載Plugins [Day 13] 備份還原全部的Jenkins檔案 [Day 14] 建置一個開發Web服務用的Docker環境 (I) [Day 15] 建置一個開發Web服務用的Docker環境 (II) [Day 29] 在Docker Jenkins上建置java web app並部署到WildFly CKAN [Day 1] Data portal platform - CKAN 部署與安裝 [Day 16] Add a new tab, controller, page on CKAN  [Day 17] CKAN Base Template 初探 [Day 19] Python Paste [Day 20] CKAN Simple Template Extends [Day 22] CKAN extension 測試踩雷中 [Day 23] CKAN extension 自動化測試 [Day 25] CKAN toolkit.py 與 helper.py function封裝 [Day 26] CKAN 修改上傳檔案上限 [Day 27] Modify CKAN header’s layout with custom plugin [Day 28] Coding standard of CKAN DataOps [Day 5] Creating a Data-Driven Enterprise with DataOps - Introduction [Day 7] Building a Data-Driven Organization [Day 8] Metadata 其他技術與心得 [Day 2] UX in the jungle 體驗 [Day 3] 多域名於同一伺服器的網路設定 [Day 4] 東大助理教授的日本旅遊素食訪談 [Day 11] 技術文章的撰寫風格拜讀 [Day

Docker Jenkins build java webapp and deploy on WildFly

圖片
大部分的內容可參考 這篇 ,重複的就不贅述拉! 上面這篇已經涵蓋 專案git之bitbucket設定 (已有java web專案) jenkins專案與套件安裝基本步驟 WildFly與 Jenkins Container檔案共用 (wildfly-dist) docker-compose.yml 僅列出部分與自此設定有關的檔案,也留下angular的方便對照,概念很類似 jboss-backend: image: jboss/wildfly:ytTest container_name: 'jboss_Backend' env_file: .env ports: - 8080:8080 volumes: - web-dist-volume:/opt/jboss/wildfly/angular-dist - wildfly-dist-volume:/opt/jboss/wildfly/standalone/deployments/ jenkins: image: jenkins/jenkins:ytTest container_name: 'jenkins' env_file: .env ports: - "18080:8080" - "50000:50000" volumes: - web-dist-volume:/angular-dist - wildfly-dist-volume:/wildfly-war volumes: web-dist-volume: wildfly-dist-volume: jenkins 的 Dockerfile 需加上下列這三行 RUN mkdir /wildfly-war RUN chown -R jenkins:0 /wildfly-war \ && chmod -R g+rw /wildfly-war 接著到jenkins的操作介面 選擇需要的 maven 版本 專案設定 (原始碼可以找已有

Modify CKAN header's layout with custom plugin

圖片
情境描述: 我們希望能夠使用客製化的icon與排版於Header上 使得最終的畫面如下 不過根據CKAN  Helpers.py 的程式碼 只有  build_nav_icon  函式比較接近我們的需求 但他們是使用fontawesome的icon 且排版在超連結的左方,如下 而他們產生這類nav tab的函式 主要是由  _make_menu_item 函式組裝對應的內容 這函式不僅Render排版而已 例如: 根據當前頁面是否與該tab要導到的頁面一致(也就是同頁面) 如果一致,就會讓該超連結 <a> 多了一個Style叫做active,就會反灰 這些原有的功能我們還是要保留 (e.g.,  _link_to , _link_active ) 因此,就不是單單取代掉而已 我們需要客製化一個自己的 Template Helper function 客製化Template Helper Function可以參考官網的 這篇 主要需要增加的程式碼如下 根目錄為  ~/ckan/lib/default/src/ckanext-ytdataservice/ckanext/ytdataservice ./public/chefHeader.css .module-content :last-child { padding-bottom : 0px ; } .mystyle { display : flex; float : right; } .mystyle-ul > li { float : left; list-style : none; text-align : center; padding-left : 1em ; padding-right : 1em ; margin-bottom : 1em ; border-radius : 5px ; } .mystyle-ul > li .hover { background-color : #003647 ; } .mystyle-ul > li .active { background-color : #003647 ; } .mystyle