樂視進軍電動車步伐加近:砸數十億美元 美國市場為目標

(圖片來源:leiphone.com)

  2月12日,媒體報導,樂視網資訊技術(北京)股份有限公司稱計畫投資數十億美元開發電動汽車,將美國定為首要目標市場。   此前的1月19日,樂視網正式確認「SEE計畫」即樂視超級汽車計畫。公司表示,這是由控股股東樂視控股所開展的一項旨在打造一個全球獨有的垂直整合汽車互聯網生態系統的重要戰略。   受超級汽車計畫等一系列利好影響,2月11日,樂視網以584億元人民幣(下同)的市值躍升創業板首位。自去年12月23日起,其股價從28.2元的底部漲至11日的69.43元,大漲146%。  
動態:正就專案資金與投資方磋商   上任伊始的樂視汽車業務中國負責人呂征宇接受電話採訪時表示,樂視計畫招聘更多人才以加強現有大約260人的電動汽車專案團隊。他說,樂視將這個專案視為一項長期投資,正在就專案資金與投資方進行磋商。樂視計畫投資數十億美元,將美國定為首要目標市場。他沒有透露更多細節。   樂視董事長賈躍亭誓言「顛覆」傳統汽車行業,宣佈要打造一款智慧化和互聯化程度更高的汽車。其目標是比亞迪和長城汽車等更成熟的中國車企未能實現的目標:把汽車賣給美國消費者。   呂征宇曾在日產汽車旗下英菲尼迪供職。他確信,就像賈躍亭所說的那樣,對於每件新生事物,當人們第一次看到的時候,首先會忽視你,然後會笑話你,再然後會反對你,然後你就贏了;利用自己在設計、製造和分銷方面的優勢,樂視有機會顛覆傳統汽車行業。  
回顧:北汽曾表示願意代工   2014年7月21日,國務院公佈《關於加快新能源汽車推廣應用的指導意見》,阿里巴巴與樂視網分別傳出要進軍汽車領域,一個牽手上汽,一個牽手北汽。   2014年4月份,北汽董事長徐和誼在一次公開場合就提出,「汽車企業未來可能會成為互聯網企業的貼牌製造商」這一觀點,甚至點名「樂視網」,表示願意「代工生產樂視汽車」。   在徐和誼看來,新能源汽車按照傳統汽車模式肯定不行。新能源汽車產業與傳統汽車產業不只是在燒油與用電方面的區別,「新能源汽車是一個全新的行業,必須要用全新的模式與之相適應」,而這個新模式的合作物件目前來看首選樂視的可能很大。   知名產業評論家信海光在微信中披露,樂視CEO賈躍亭在美期間,除了佈局海外市場,在美國創立兩家子公司,推動樂視生態業務全球化全面啟動外,另一高度保密專案,就是樂視汽車專案。據悉,賈躍亭在美國和徐和誼密會,初步達成合作汽車的意向,至於細節不得而知。   2014年4月9日,賓士CLA與樂視強強聯合上演了一場時尚行銷秀。賓士發言人表示其品牌看中了樂視網中極具潛力、並願為生活品質買單的高端用戶,而這批用戶對於北汽開拓新能源汽車市場十分關鍵。此外,寶馬、英菲尼迪等高端車企品牌也都上過樂視超級電視廣告。樂視一直強調的「生態」建設,是樂視進軍汽車業的驅動力,也是樂視推出互聯網汽車的良好土壤。   按照目前的樂視產品思路,互聯網行銷方式與產品價格將是撒手鐧,評論人士認為,樂視汽車一旦推向市場,會很大程度推動新能源車或者互聯網汽車的市場普及,而樂視網本身也會很快走向年營收千億元這一量級。  
影響:超級計畫引爆股價   2015年2月11日,樂視網收穫本週第2個、今年第5個漲停板。憑藉密集發力榮登創業板老大的樂視網,以市值584億元遠遠甩開第二名東方財富,後者總市值為498億元。   樂視網市值躍升首位,用了35個交易日。自去年12月23日起,其股價從28.2元的底部漲至11日的69.43元,大漲146%。   市場人士認為,樂視網已經與京東、小米、360一起,組成繼百度、阿里巴巴和騰訊之後的中國互聯網第二梯隊。樂視的總市值已經超越奇虎360,資料顯示,在納斯達克上市的360市值為78億美元,約合人民幣488億元。   樂視網股價任性飆升的背後,是電動超級汽車等計畫獲得了市場認同。   1月14日,美國影響力最大的商業科技媒體Business Insider刊發文章,認為中國互聯網公司樂視CEO賈躍亭將憑藉電動超級汽車,與推出特斯拉電動汽車的埃隆•馬斯克一樣,成為全球矚目的明星企業家。Business Insider文中稱:賈躍亭將是中國的「埃隆•馬斯克」。   1月19日,樂視網正式確認「SEE計畫」即樂視超級汽車計畫。公司表示,這是由控股股東樂視控股所開展的一項旨在打造一個全球獨有的垂直整合汽車互聯網生態系統的重要戰略,樂視網與其運營主體並無股權關係,短期內也不會對公司業績構成影響。   連結:特斯拉跌落神壇敲響警鐘   2月11日,特斯拉中國1月銷量僅為120輛的消息幾乎佔據了各大財經和科技媒體的頭條。這家曾經令中國媒體不惜溢美之詞、引得自主品牌車企紛紛一探究竟的電動車製造企業,在一年後跌落神壇。   特斯拉的失敗不可避免地讓一大批揮師進軍汽車行業的互聯網公司坐立難安。通過「電腦+四個輪子」的品牌形象和打破4S經銷體系、主打直營的銷售模式,特斯拉吸引了不少中國擁躉,其中不乏小米和樂視這樣靠垂直整合起家的手機和電視廠商。   從目前已經公佈的樂視超級汽車等方案來看,特斯拉的這批中國學徒們均給自己貼上了「智慧汽車」、「互聯網汽車」的標籤,但在電動車最核心的電池、電機、電控及底盤技術上卻諱莫如深。   特斯拉希望通過推出廉價版的Model X來緩解單產品線的窘境,而電池成本的下降是實現低價版車型量產的基礎。馬斯克曾樂觀預計10年內特斯拉能夠將電池成本降到100美元/千瓦時,但包括電池專家在內紛紛對馬斯克的預期予以駁斥:不僅在2025年之前,電池成本不可能降低至167美元/千瓦時,而且特斯拉Model X價格將從原本的3萬美元定價提高到5-8萬美元。   特斯拉在中國市場陷入泥潭戳破了電動車的泡沫,當樂視小米們在造車的道路上越走越遠時,不得不回頭看看特斯拉的警示。   (文章來源:長江商報)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

新北清潔公司,居家、辦公、裝潢細清專業服務

※別再煩惱如何寫文案,掌握八大原則!

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※超省錢租車方案

程序員敲代碼時耳機里聽的到底是什麼?

我是風箏,公眾號「古時的風箏」,一個兼具深度與廣度的程序員鼓勵師,一個本打算寫詩卻寫起了代碼的田園碼農!
文章會收錄在 JavaNewBee 中,更有 Java 後端知識圖譜,從小白到大牛要走的路都在裏面。

程序員上班戴耳機聽歌難道不是正常的嗎,真的還有公司不允許程序員戴耳機的嗎?不戴耳機能寫代碼?

那程序員的耳機里聽的是什麼呢?我採訪了一眾程序員朋友。

鋼鐵程序員王二麻子同學

聽的什麼?我根本就不知道,我只是不想讓別人打擾我

有時候開發確實是比較費腦子的,尤其是遇到複雜邏輯的時候。正當思如泉涌、靈感迸發的時候,旁人看着我坐在那裡一動不動,好像什麼都沒有做,其實我腦子里正在構思一個複雜的流程。

這時候,突然有個人走過來打斷我,前面的思考都白費了,你說傷心不,你說氣人不。

所以,為了防止上面的情況出現,不得不戴上耳機。至於聽什麼,不重要,我只是告訴別人,別過來,我現在沒時間。

生活需要儀式感的劉精神同學

聽什麼不重要,關鍵是儀式感

生活需要儀式感,寫代碼也需要儀式感啊。當我戴上耳機的那一刻,我感覺精神抖擻,彷彿遊離的三魂六魄都回來了,寫代碼更有動力。

要是不戴耳機,感覺渾身無力,只想摸魚,寫代碼什麼的,根本想都想不起來。

心疼自己的高愛己同學

其實我就是不想聽我的机械鍵盤聲音,實在太吵了

你也知道,筆記本自帶的鍵盤總感覺軟綿綿的,敲起來實在不給力,嚴重影響我的工作效率。那必須得買個鍵盤啊,在多個朋友的推薦下,我就買了一個青軸鍵盤。你別說,觸感真不錯,每按一下,都感覺指尖有一股電流滑過,同時伴隨着啪啪啪的聲音,感覺寫代碼效率明顯變高了,更神奇的是 bug 都比以前少了,你說神奇不。

但是呢,有個缺點,就是時間久了吧,感覺稍微有那麼一點點吵,所以我就配了個耳機,從此之後,既得到了直達靈魂的觸感,又不會感覺吵了。更神奇的一點是,以前罵我的同事好像都不罵我了。

真的在聽東西的同學

雖然存在以上幾位同學說的情況,但大多數情況下, 我們是真的在聽東西。比如我,為了聽高品質的,還專門買了網易雲音樂的 VIP 。

為什麼是東西,而不是音樂呢,因為有的人不是在聽音樂。

我聽說有人在寫代碼的時候聽評書,更有厲害的,竟然聽相聲。那我想只有三種可能。

  1. 根本沒在寫代碼,可能是在摸魚。
  2. 評書一點都不精彩,相聲一點都不好笑,僅僅是一門語言的藝術而已。
  3. 這是個大佬,已經進入忘我的境界,聽到的不是語言,而是聲音解析成比特位時產生的白噪音,一般人聽不到,只有某些段位的大佬可以。

當然畢竟大佬不常有,而普通群眾常用。大部分人聽的確實是音樂。比如我吧,我戴耳機真的是在聽音樂,為了降噪、減少干擾,提高專註力,提升效率。

什麼類型的音樂更受程序員歡迎呢

英文歌

英文歌是大多數程序員的最愛。請看網易雲音樂給我的每日歌曲推薦,除了伍佰的一首中文歌亂入,剩下的都是英文歌。

你真的認為我英語很好嗎,正好相反,之所以英文歌那麼受歡迎,就是因為聽不懂歌詞是什麼意思,這樣才不會被歌詞帶跑偏,沒錯,我們聽的就是這個節奏。

那要是中文歌就不一樣了,比如說當我聽到「你的酒館對我打了烊,子彈在我心頭上了膛」的時候,我就以為真的要打烊了,子彈真的要上膛了,從而引發一系列思考,酒館為什麼對我打烊,子彈為什麼要上膛,生意不做了嗎,刑法基本法則不懂嗎。

為了證明這一點,我到網易雲音樂上搜了「程序員」相關的歌單,點進去一看,大部分也都是英文歌,看來大家英文都不太好。

然後我又搜了「產品狗」相關的歌單,同樣也是英文歌為主,可見我們雖然不太對付,請參考歌單『產品狗如何說服程序猿』和『程序員如何回應產品狗』,但是方法論還是差不多的。

純音樂

純音樂也是很受歡迎的,我有個同事最喜歡聽貝多芬的命運交響曲,我就沒那麼文藝了。我一般都是聽那種激昂的小提琴或者聽完感覺自己馬上要登基了的那種,不容易犯困。

白噪音

小提琴太勁爆,不能常聽,犯困的下午聽聽可以提神,bug 太多又不想改的時候可以聽聽。大多數時候,不需要那麼亢奮,保持內心的平靜就是寫代碼最好的狀態。那就聽聽白噪音好了,比如雨聲、風聲、溪水聲、鳥唱蟬鳴。

我最喜歡的就是雨聲,嘩啦啦的大雨,再配上驚雷,簡直不要太平靜,innerpeace。

比如下面這個,一聽就是一個小時。

保留曲目

每個人都有自己家私藏的歌單,百聽不厭的那種,當然每個人的品位不一樣、口味兒不一樣,比如當年有個哥們兒異常興奮的把他的珍藏歌單分享給我,我當即表示很感動,一定要認真聽一聽。可當我硬着頭皮聽完第二首的時候,我內心是拒絕的,只能委婉的跟哥們兒說:這 TM 什麼玩意兒。當然是不會破壞友誼的小船的,如果是不熟的朋友,那肯定會豎起大拇指,並且連連點頭稱讚:真不錯,品位棒棒噠。

我沒有薦歌啊,向別人推薦歌曲犹如喂別人食物,你覺得好吃別人並一定覺得好吃。下面是我的 2018 年年度聽歌報告,Sophie Zelmani(蘇菲.珊曼妮)的熱門50單曲就是我的保留曲目,白聽不厭,而且更重要的不仔細聽,還是聽不出歌詞的意思,正好適合寫代碼用。

另外,作為一個程序員鼓勵師,為了鼓勵我自己,我也創建了一個「程序員鼓勵師」的歌單,經常拿出來聽聽接收鼓勵。

作為程序員的你,耳機里有什麼特殊的內容嗎?

壯士且慢,先給點個贊吧,總是被白嫖,身體吃不消!

我是風箏,公眾號「古時的風箏」。一個兼具深度與廣度的程序員鼓勵師,一個本打算寫詩卻寫起了代碼的田園碼農!你可選擇現在就關注我,或者看看歷史文章再關注也不遲。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

※教你寫出一流的銷售文案?

※超省錢租車方案

基於Docker Compose的.NET Core微服務持續發布

是不是現在每個團隊都需要上K8s才夠潮流,不用K8s是不是就落伍了。今天,我就通過這篇文章來回答一下。

一、先給出我的看法和建議

我想說的是,對於很多的微小團隊來說,可能都不是一定要上K8s,畢竟上K8s也是需要成本和人力的。對像我司一樣的傳統企業做数字化轉型的信息團隊來講,人數不多,沒有專門的Ops人員,領導又想要儘快迭代支持公司業務發展,而且關鍵還要節省成本(內心想法是:WTF)。

在此之下,信息團隊需要綜合引入先進技術帶來的價值以及需要承擔的成本和風險。任何架構的產生,都會解決一定的問題,但是同樣也會引入新的複雜度,正如微服務架構風格,看着香實際吃着才知道需要承受很多的“苦”(比如數據一致性又比如服務的治理等等)。

因此,結合考慮下來,我的建議是開發測試環境使用Docker Compose進行容器編排即可,而UAT或生產環境則建議使用雲廠商的K8s服務(比如阿里雲ACK服務)而不選擇自建K8s集群

那麼,今天就跟大家介紹一下如何使用Docker Compose這個輕量級的編排工具實現.NET Core微服務的持續發布。

二、Docker Compose

Docker主要用來運行單容器應用,而Docker Compose則是一個用來定義和應用多容器應用的工具,如下圖所示:

使用Docker Compose,我們可以將多容器的定義和部署方式定義在一個yml文件中,這種方式特別是微服務這種架構風格,可以將多個微服務的定義及部署都規範在一個yml文件中,然後一鍵部署、啟動或銷毀整個微服務應用。所有的一切操作,只需要下面的一句話:

$docker-compose up

Compose 的安裝請參考:https://docs.docker.com/compose/install/#install-compose,這裏就不再贅述,它不是本文重點。

安裝后驗證:

$docker-compose --version
docker-compose version 1.25.1, build a82fef07

三、一個簡單的發布流程示例

本文演示示例的流程大概會如下圖所示:

閱讀過我之前的一篇文章《基於Jenkins Pipeline的ASP.NET Core持續集成實踐》的童鞋應該對這個流程比較熟悉了。這裏,我仍然延續這個流程,作為一個平滑過渡。首先,我們在Jenkins上觸發容器的發布流水線任務,此任務會從Git服務器上拉取指定分支(一般都是測試分支)的最新代碼。

其次,在CI服務器上使用.NET Core SDK執行Build編譯和發布Release文件,基於發布后的Release文件進行鏡像的打包(確保你的項目裏面都有Dockerfile且設置為“始終複製”)。然後,基於打包后的鏡像,將其推送到企業的私有Registry服務器上(即本地鏡像倉庫,可以基於Harbor搭建一個,也可以直接用Docker Registry搭建一個,不建議使用docker hub的公有庫,如何搭建私有鏡像倉庫可以參考我的這一篇文章:《Docker常用流行鏡像倉庫的搭建》)。

最後,在測試服務器或要運行容器的服務器上執行docker compose up完成容器的版本更新。當然,也可以直接在docker-compose.yml文件內設置編譯路徑完成編譯和發布的操作(Dockerfile裏面定義進行Build和Publish)。這裏目的在於讓實例更簡單,且能讓初學者更容易理解,於是我就分開了。

四、.NET Core微服務發布示例

微服務示例準備

假設我們有一堆使用ASP.NET Core開發的微服務,這些微服務主要是為了實現諸如API網關、Identity鑒權、Notification通知、Job中心等基礎設施服務,因此我們將他們整合在一起進行持續集成和部署。

這裏為了讓示例盡可能簡單,每個微服務的Dockerfile只有以下幾句(這裏以一個通知API服務為例):

FROM reg.xdp.xi-life.cn/xdp-service-runtime:2.2
WORKDIR /app
COPY . /app
EXPOSE 80
ENTRYPOINT ["dotnet", "XDP.Core.Notification.API.dll"]

其中這裏的容器鏡像來自於私有鏡像倉庫,是一個封裝過的用於ASP.NET Core Runtime的容器鏡像。當然,上面說過,也可以在Dockerfile裏面進行服務的編譯和發布。

流水線任務腳本

同樣,為了在Jenkins上快速進行微服務的鏡像構建和推送以及部署,我們也需要編寫一個流水線構建任務。

下面是這個示例流水線任務的腳本:

pipeline{
    agent any
    environment {
        API_CODE_BRANCH="*/master"
        SSH_SERVER_NAME_REGISTRY="XDP-REGISTRY-Server"
        SSH_SERVER_NAME_DEV="XDP-DEV-Server"
        SSH_SERVER_NAME_AT="XDP-AT-Server"
        SSH_SERVER_NAME_SIT="XDP-SIT-Server"
    }
    stages {
        stage('XDP Core APIs Checkout & Build') {
            steps{
             checkout([$class: 'GitSCM', branches: [[name: env.API_CODE_BRANCH]], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '35b9890b-2338-45e2-8a1a-78e9bbe1d3e2', url: 'http://192.168.18.150:3000/XDP.Core/XDP.Core.git']]])
             echo 'Core APIs Dev Branch Checkout Done' 
             bat  '''
               dotnet build XDP.Core-InfraServices.sln
               dotnet publish "%WORKSPACE%\\src\\services\\XDP.Core\\Components\\XDP.Core.ApiGateway\\XDP.Core.ApiGateway.csproj" -o "%WORKSPACE%\\XDP.Core.ApiGateway.API\\publish" --framework netcoreapp2.2
               dotnet publish "%WORKSPACE%\\src\\services\\XDP.Core\\Components\\XDP.Core.ApiGateway.Internal\\XDP.Core.ApiGateway.Internal.csproj" -o "%WORKSPACE%\\XDP.Core.ApiGateway.Internal.API\\publish" --framework netcoreapp2.2
               dotnet publish "%WORKSPACE%\\src\\services\\XDP.Core\\Services\\XDP.Core.Authorization.API\\XDP.Core.Authorization.API.csproj" -o "%WORKSPACE%\\XDP.Core.Authorization.API\\publish" --framework netcoreapp2.2
               dotnet publish "%WORKSPACE%\\src\\services\\XDP.Core\\Services\\XDP.Core.Authorization.Job\\XDP.Core.Authorization.Job.csproj" -o "%WORKSPACE%\\XDP.Core.Authorization.Job\\publish" --framework netcoreapp2.2
               dotnet publish "%WORKSPACE%\\src\\services\\XDP.Core\\Services\\XDP.Core.Identity.API\\XDP.Core.Identity.API.csproj" -o "%WORKSPACE%\\XDP.Core.Identity.API\\publish" --framework netcoreapp2.2
               dotnet publish "%WORKSPACE%\\src\\services\\XDP.Core\\Services\\XDP.Core.Notification.API\\XDP.Core.Notification.API.csproj" -o "%WORKSPACE%\\XDP.Core.Notification.API\\publish" --framework netcoreapp2.2
               dotnet publish "%WORKSPACE%\\src\\services\\XDP.Core\\Services\\XDP.Core.JobCenter\\XDP.Core.JobCenter.csproj" -o "%WORKSPACE%\\XDP.Core.JobCenter.API\\publish" --framework netcoreapp2.2
               '''
             echo 'Core APIs Build & Publish Done'
            }
        }
        stage('XDP API Gateway Docker Image') {
            steps{
                bat '''
                    docker rmi reg.xdp.xi-life.cn/core-apigateway-portal:latest;
                    cd XDP.Core.ApiGateway.API/publish;
                    docker build -t reg.xdp.xi-life.cn/core-apigateway-portal:latest .;
                    docker push reg.xdp.xi-life.cn/core-apigateway-portal:latest;
                '''
                echo 'XDP Portal API Gateway Deploy Done'    

                bat '''
                    docker rmi reg.xdp.xi-life.cn/core-apigateway-internal:latest;
                    cd XDP.Core.ApiGateway.Internal.API/publish;
                    docker build -t reg.xdp.xi-life.cn/core-apigateway-internal:latest .;
                    docker push reg.xdp.xi-life.cn/core-apigateway-internal:latest;
                '''
                echo 'XDP Internal API Gateway Deploy Done'
            }
        }
        stage('Core Identity API Docker Image') {
            steps{
                ......
            }
        }
        stage('Core Authorization Job Docker Image') {
            steps{
                ......
            }
        }
        stage('Core Notification API Docker Image') {
            steps{
                ......  
            }
        }
        stage('Core JobCenter API Docker Image') {
            steps{
                ......     
            }
        }
        stage('Deploy to Local SIT Server') {
            steps{
                sshPublisher(publishers: [sshPublisherDesc(configName: env.SSH_SERVER_NAME_SIT, 
                    transfers: [sshTransfer(cleanRemote: false, excludes: '', 
                    execCommand: '''
                     cd compose/xdp;
                     IMAGE_TAG=latest docker-compose down;
                     docker rmi $(docker images -q)
                     IMAGE_TAG=latest docker-compose up -d;
                    ''', 
                    execTimeout: 120000, flatten: false, makeEmptyDirs: false, 
                    noDefaultExcludes: false, patternSeparator: '[, ]+', 
                    remoteDirectory: 'compose/xdp/', remoteDirectorySDF: false, 
                    removePrefix: '', 
                    sourceFiles: '', 
                    excludeFiles: '')], 
                    usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
                echo 'Deploy to XDP SIT Server Done'     
            }
        }
    }
}

這個腳本我省去了一些重複的內容,只需要了解它的職責即可。

需要注意的地方有幾點:

(1)在進行dotnet build的時候,要明確SDK使用哪個版本,比如因為這裏的示例代碼是基於.NET Core 2.2開發的因此這裏使用的是2.2。如果你使用的是2.1,則標註2.1,如果是3.1,則標註3.1。

(2)在進行docker build的時候,要明確鏡像使用哪個Tag,這裏因為是本地開發測試環境,所以直接簡單暴力的直接使用了latest這個Tag。

(3)在進行sshPublish的時候,要提前將docker-compose.yml配置拷貝到對應的指定目錄下。當然,這一塊建議也將其納入git倉庫進行統一管理和統一發布到不同的環境的指定目錄下。

(4)如果你的Jenkins是裝在Windows Server上,要記住只有Windows Server 2016及以上版本才支持Docker,否則無法直接進行docker的命令行操作。如果低於2016,Windows 10專業版也可以,不過不建議。

擴展點:

是否可以一套docker-compose方案標準化部署到多個測試環境?是可以的,我們可以在Jenkins構建任務中配置Parameters,這樣就可以一次性部署到多個環境。例如,下面的示例中我設置了一個每次發布可以選擇到底要發布到哪個環境,這裡是單選,你也可以設置為多選。

效果如下:

docker-compose.yml

終於來到了compose的重點內容:docker-compose.yml

這裏我給出上面這個示例的yml示例內容(同樣,也省略了重複性的內容):

version: '2'

services:
  core_apigateway_portal:
    image: reg.xdp.xi-life.cn/core-apigateway-portal:${IMAGE_TAG}
    container_name: xdp_core_apigateway_portal
    restart: always
    privileged: true
    mem_limit: 1024m
    memswap_limit: 1024m
    env_file:
      - ../docker-variables.env
    ports:
      - 5000:80
    volumes:
      - /etc/localtime:/etc/localtime

  core_apigateway_internal:
    image: reg.xdp.xi-life.cn/core-apigateway-internal:${IMAGE_TAG}
    container_name: xdp_core_apigateway_internal
    restart: always
    privileged: true
    mem_limit: 1024m
    memswap_limit: 1024m
    env_file:
      - ../docker-variables.env
    ports:
      - 5100:80
    volumes:
      - /etc/localtime:/etc/localtime

  core_identity_api:
    image: reg.xdp.xi-life.cn/core-identity-api:${IMAGE_TAG}
    container_name: xdp_core_identity_api
    restart: always
    privileged: true
    mem_limit: 512m
    memswap_limit: 512m
    env_file:
      - ../docker-variables.env
    ports:
      - 6010:80
    volumes:
      - /etc/localtime:/etc/localtime

  core_authorization_api:
    ......

  core_authorization_job:
    ......

  core_notification_api:
    ......

  core_jobcenter_api:
    ......

  bff_xams_api:
    ......

備註:這裏使用的是version:2的語法,因為3開始不支持內存限制mem_limit等屬性設置。當然,你可以使用3的語法,去掉mem_limit和memswap_limit屬性即可。

這裏的env環境變量配置是定義在另外一個單獨的env文件裏面的,建議每個環境建立一個單獨的env文件供docker-compose.yml文件使用,比如下面是一個AT(自動化測試)環境的env文件內容示例:

# define xdp containers env
ASPNETCORE_ENVIRONMENT=at
ALIYUN_ACCESS_KEY=sxxdfdskjfkdsjkds
ALIYUN_ACCESS_SECRET=xdfsfjiwerowuoi
JWT_TOKEN=sdfsjkfjsdkfjlerwewe
IDENTITY_DB_CONNSTR=Server=192.168.16.150;Port=3306;Database=identity_at;Uid=xdpat;Pwd=xdpdba;Charset=utf8mb4
APIGATEWAY_DB_CONNSTR=Server=192.168.16.150;Port=3306;Database=services_at;Uid=xdpat;Pwd=xdpdba;Charset=utf8mb4
......
API_VERSION=AT-v1.0.0

這裏,最主要的環境變量就是ASPNETCORE_ENVIRONMENT,你需要指定這些要編排的微服務容器使用哪個環境的appSettings。同樣,這裏也引申出另一個問題,那就是配置的集中管理,可能你會說出類似Apollo,Spring Cloud Config,K8s Configmap之類的解決方案。這裏不是本文的重點,也就跳過。

快速實操體驗

現在我們來通過在Jenkins中觸發構建任務,可以看到如下圖所示的流水線任務狀態示意:

這樣,一個簡單的快速發布流水線就完成了,在單機多容器編排部署方面,Docker Compose是個不錯的選擇。

五、一些擴展

Consul服務發現容器編排

相比很多童鞋也都在使用Consul作為服務發現組件,我們也可以將Consul納入到Compose中來統一編排。例如,我們可以這樣來將其配置到docker-compose.yml中:

services:
  consul_agent_server:
    image: reg.xdp.xi-life.cn/xdp-consul-runtime:${IMAGE_TAG}
    container_name: xdp_consul_agent_server
    restart: always
    privileged: true
    mem_limit: 1024m
    memswap_limit: 1024m
    env_file:
      - ../docker-variables.env
    ports:
      - 8500:8500
    command: 
      agent -server -bootstrap-expect=1 -ui -node=xdp_local_server -client='0.0.0.0' -data-dir /consul/data -config-dir /consul/config -datacenter=xdp_local_dc
    volumes:
      - /etc/localtime:/etc/localtime
      - /docker/consul/data:/consul/data
      - /docker/consul/conf:/consul/config

這裏只使用到了一個Consul Server Agent,你可以配置一個3個Server節點的Consul Server集群,請自行查閱相關資料。此外,基於Compose我們也可以為API網關設置links從而實現服務發現的效果,當然前提是你的服務數量不多的前提下。這種方式是通過網絡層面幫你做了一層解析,從而實現多個容器之間的互連。這裏也推薦一下俺們成都地區的小馬甲老哥的一篇《docker-compose真香》的文章,他講解了docker的網橋模式。

基於Compose的編譯發布一體化

我們可以看到在很多開源項目中都是將編譯發布一體化的,因此我們可以看到在這些項目的Dockerfile中是這樣寫的:

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /app

COPY ./*.sln ./NuGet.Config ./
COPY ./build/*.props ./build/

# Copy the main source project files
COPY src/*/*.csproj ./
RUN for file in $(ls *.csproj); do mkdir -p src/${file%.*}/ && mv $file src/${file%.*}/; done

RUN dotnet restore

# Copy everything else and build app
COPY . .
RUN dotnet build -c Release

# api-publish

FROM build AS api-publish
WORKDIR /app/src/Exceptionless.Web

RUN dotnet publish -c Release -o out

# api

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS api
WORKDIR /app
COPY --from=api-publish /app/src/Exceptionless.Web/out ./
ENTRYPOINT [ "dotnet", "Exceptionless.Web.dll" ]

......

在Dockerfile中我們看到的是拉取.NET Core SDK來進行Restore、Build和Publish,進一步地提高了標準化的遷移性,也盡可能發揮Docker的集裝箱作用。
這時你可以在docker-compose.yml中定義Dockerfile告訴compose先幫我進行Build鏡像(這裏的build配置下就需要指定Dockerfile的位置):

services:
  api:
    build:
      context: .
    image: exceptionless/api:latest
    restart: always
    ......

六、小結

Docker是容器技術的核心、基礎,Docker Compose是一個基於Docker的單主機容器編排工具,功能並不像Docker Swarm和Kubernetes是基於Docker的跨主機的容器管理平台那麼豐富。

我想你看到這裏也應該有了自己的答案,結合我在最開頭給的建議,如果你處在一個小團隊中,綜合人員水平、技能儲備、運維成本 及 真實業務量要求,可以在開發測試環境(一般都是單主機環境的話)中使用Docker Compose進行初步編排。而在生產環境,即使是小團隊也建議上雲主機,利用雲的彈性為未來的業務發展做基礎,然後可以考慮使用雲上的K8s服務來進行生產級的容器編排。

 

 

作者:周旭龍

出處:https://edisonchou.cnblogs.com

本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

新北清潔公司,居家、辦公、裝潢細清專業服務

※別再煩惱如何寫文案,掌握八大原則!

※教你寫出一流的銷售文案?

※超省錢租車方案

當我們創建HashMap時,底層到底做了什麼?

jdk1.7中的底層實現過程(底層基於數組+鏈表)

在我們new HashMap()時,底層創建了默認長度為16的一維數組Entry[ ] table。當我們調用map.put(key1,value1)方法向HashMap里添加數據的時候:

首先,調用key1所在類的hashCode()計算key1的哈希值,通過key1的hash值與數組的最大索引進行位運算以後,得到了在 Entry數組中的存放位置:

如果此位置上的數據為空,此時的key1-value1添加成功。

如果此位置上的數據不為空(意味着此位置已經存在一個或多個數據),比較key1和已經存在的一個或多個數據的哈希值:

如果key1的哈希值與已經存在的數據的哈希值都不相同,此時key1-value1添加成功。

如果key1的哈希值與已經存在的數據的某一個數據的哈希值相同,繼續比較:調用key1所在類的equals()方法:

如果equals()返回false,此時key1-value1添加成功;

如果equals()返回true,使用value1替換value2。

需要注意的是,若原來位置已有數據,則此時key1-value1和原來的數據以鏈表的方式存儲。

在不斷的添加過程中,會涉及到擴容問題,當數組容量大於數組現有長度乘以加載因子(如16*0.75,默認的加載因子為0.75)的時候,就會進行數組擴容,以減少哈希衝突(哈希衝突是指哈希函數算出來的地址被別的元素佔用了),提高查詢效率。默認的擴容方式,擴容為原來容量的2倍,並將原有的數據複製過來。

jdk1.8的底層實現過程(底層基於數組+鏈表+紅黑樹)

jdk1.8與jdk1.7中底層的創建過程相似,但有不同,首先,new HashMap()底層沒有創建出一個長度為16的數組,在調用put()方法時,判斷數組是否存在,如果不存在創建長度為16的Node[ ]數組。接下來的過程與jdk1.7相似。最後,當某一個索引位置上的元素以鏈表形式存在的數據個數>8且當前數組的長度>64時,此時此索引位置上的所有數據改為使用紅黑樹存儲。

在jdk1.7中,即使在“數組容量大於數組現有長度乘以加載因子”時擴容,也不可避免地會有哈希衝突存在,因此,在jdk1.8中引入紅黑樹是為了進一步減少哈希衝突,提高查詢效率。

紅黑樹是一種自平衡的二叉查找樹,是一種數據結構,典型的用途是實現關聯數組。根節點必須是黑色,其他每個節點要麼是紅色,要麼是黑色。

結論:HashMap鍵是不能重複的,去除重複的條件是依賴鍵的hashCode方法和equals方法,如果鍵是自己的對象類型,必須要重寫hashCode方法和equals方法,否則,不能去除重複的鍵。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

新北清潔公司,居家、辦公、裝潢細清專業服務

※別再煩惱如何寫文案,掌握八大原則!

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※超省錢租車方案

蘇聯秘密鈾礦計畫遺毒 中亞國家與輻射災難賽跑

摘錄自2019年11月6日中央社報導

吉爾吉斯邁盧蘇鎮在蘇聯時期有神祕稱號:Mailbox 200,是一項鈾礦秘密開發計畫執行地。如今城鎮蕭條,鄰近地質不穩處還有數座鈾尾礦堆隨時可能傾塌,污染環境。

這些鈾尾礦堆(鈾殘渣堆)重達數萬噸,只消一次天然災害,水流冲刷或山體滑坡,就有可能污染人口達1400萬且橫跨吉爾吉斯、烏茲別克和塔吉克接壤地帶的費爾干納盆地(Ferghana valley)飲用水。

根據歐盟執委會歐洲復興開發銀行(EBRD),這些接連遭蘇聯和吉爾吉斯政府忽略數十年的鈾尾礦堆必須盡快強化,以避免災難。為此,它們正為此籌募約3000萬歐元經費。此外,為在蘇聯時期也有鈾礦場運作的鄰國塔吉克進行類似清除工作,必需另外籌募4000萬歐元經費。

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

※教你寫出一流的銷售文案?

※超省錢租車方案

以電動巴士為先導 比亞迪今年將進軍韓國市場

比亞迪亞太汽車銷售事業部總經理劉學亮近日在韓國國際電動汽車展期間表示,比亞迪計畫以電動巴士為先導打入韓國市場,力爭在2015年年底之前讓韓國民眾享用上比亞迪的電動車。未來也可能會根據韓國消費者的具體需求,尋求E6系列計程車的進入韓國市場的可能性。   他表示,新能源汽車作為新興產業進入別國需經過包括政府認證在內的漫長流程,。比亞迪正在和不同的當地合作方接洽,希望最終可以在韓國找到適合發展電動車的新合作模式。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

※教你寫出一流的銷售文案?

※超省錢租車方案

美國率先宣布開放中國產熟禽肉進口

摘錄自2019年11月09日中央通訊社美國報導

中美貿易談判雙方主談人10月25日通話時提到,將互相解禁禽肉進口。隨著美國8日率先宣布對中國解禁,分析認為,若中國也解禁,不僅美國農民將受益,也能緩解被非洲豬瘟抬高的肉價。

10月25日中美通話中協議,美方確認在進口中國熟製禽肉及鯰魚產品時,使用等效的監管體系;中國則就解除美國禽肉對中出口禁令,及應用肉類產品公共衛生訊息系統達成共識。美國政府於當地時間11月8日公布中國自產原料禽肉輸美的最終規則,宣布確認雙方相關監管體系等效,中國國產熟禽肉將可對美出口。

針對美方率先宣布的消息,中國海關總署今天以發言人名義表示,這讓中國繼加拿大、墨西哥、智利等國之後,有資格對美國出口自產原料熟製禽肉。

中國自2004年開始,就一直積極爭取這項目標,但美國先前僅允許中國使用美國或特定國家的禽肉原料加工後輸往美國。這次禽肉進口談判,正值非洲豬瘟疫情嚴重削減中國這一全球頭號豬肉消費國的生豬存欄數量。中國為填補蛋白質來源的市場空缺,正迅速增加肉類進口量,而雞肉正是替代豬肉最便宜的一種肉類。

此外,如果中國同樣解除對美國禽肉產品進口的限制,也將是美國農民和肉類加工企業的一大勝利。

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

※教你寫出一流的銷售文案?

※超省錢租車方案

不尾號限行!純電動車在北京受禮遇

4月2日,北京市政府發佈消息稱,自2015年4月11日至2016年4月10日,北京將繼續實施工作日機動車尾號限行措施,限行時間為7時至20時,範圍為五環路以內道路(不含五環路)。   而今年的限行措施特別提到,純電動小客車將不受尾號限行影響,具體執行時間由交管局公佈。其中,純電動小客車不受工作日高峰時段區域限行交通管理措施限制,具體執行時間由市公安交通管理部門另行公佈。   今年3月,國家交通運輸部發佈的《關於加快推進新能源汽車在交通運輸行業推廣應用的實施意見》便對推行電動車在內的新能源車有政策傾斜,提出要對新能源汽車不限行、不限購,對新能源計程車的運營權指標適當放寬。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

※教你寫出一流的銷售文案?

※超省錢租車方案

GitLab Runner部署(kubernetes環境)

歡迎訪問我的GitHub

https://github.com/zq2599/blog_demos
內容:所有原創文章分類匯總及配套源碼,涉及Java、Docker、Kubernetes、DevOPS等;

關於GitLab CI

如下圖所示,開發者將代碼提交到GitLab后,可以觸發CI腳本在GitLab Runner上執行,通過編寫CI腳本我們可以完成很多使用的功能:編譯、構建、生成docker鏡像、推送到私有倉庫等:

本次實戰內容

今天咱們會一起完成以下操作:

  1. 部署minio,pipeline腳本中的cache功能由minio來實現;
  2. 配置和部署GitLab Runner;
  3. 編寫和運行pipeline腳本;

環境和版本信息

本次實戰涉及到多個服務,下面給出它們的版本信息供您參考:

  1. GitLab:Community Edition 13.0.6
  2. GilLab Runner:13.1.0
  3. kubernetes:1.15.3
  4. Harbor:1.1.3
  5. Minio:2020-06-18T02:23:35Z
  6. Helm:2.16.1

需要提前準備好的服務

以下服務需要您在實戰前提前準備好:

  1. 部署好GitLab,參考《群暉DS218+部署GitLab》
  2. 部署好Harbor,參考《群暉DS218+部署Harbor(1.10.3)》
  3. 部署好Helm,參考《部署和體驗Helm(2.16.1版本)》

準備完畢后開始實戰;

部署minio

minio作為一個獨立的服務部署,我將用docker部署在服務器:192.168.50.43

  1. 在宿主機準備兩個目錄,分別存儲minio的配置和文件,執行以下命令:
mkdir -p /var/services/homes/zq2599/minio/gitlab_runner \
&& chmod -R 777 /var/services/homes/zq2599/minio/gitlab_runner \
&& mkdir -p /var/services/homes/zq2599/minio/config \
&& chmod -R 777 /var/services/homes/zq2599/minio/config
  1. 執行docker命令創建minio服務,指定服務端口是9000,並且指定了access key(最短三位)和secret key(最短八位):
sudo docker run -p 9000:9000 --name minio \
-d --restart=always \
-e "MINIO_ACCESS_KEY=access" \
-e "MINIO_SECRET_KEY=secret123456" \
-v /var/services/homes/zq2599/minio/gitlab_runner:/gitlab_runner \
-v /var/services/homes/zq2599/minio/config:/root/.minio \
minio/minio server /gitlab_runner
  1. 瀏覽器訪問,輸入access key和secret key后登錄成功:
  2. 如下圖,點擊紅框中的圖標,創建一個bucket,名為runner
  3. 至此,minio已備好,接下來在kubernetes環境部署GitLab Runner;

GitLab Runner的類型

從使用者的維度來看,GitLab Runner的類型分為sharedspecific兩種:

  1. 如果您想創建的GitLab Runner給所有GitLab倉庫使用,就要創建shared類型;
  2. 如果您的GitLab Runner只用於給某個固定的Gitlab倉庫,就要創建specific類型;

今天的實戰,我們創建的是specific類型,即先有GitLab代碼倉庫,然後創建該倉庫專用的runner,所以請您提前準備好GitLab倉庫;

準備GitLab配置信息(specific)

在部署GitLab Runner之前,要準備兩個關鍵的配置信息,以便GitLab Runner啟動后可以順利連接上GitLab:

  1. 瀏覽器訪問GitLab,打開用來做CI的代碼倉庫,點擊Settings -> CI/CD -> Runners -> Expand:
  2. 如下圖,紅框1中是gitlab url,紅框2中是registration token,記好這兩個參數,稍後會用到:

準備GitLab配置信息(shared)

本次實戰不會創建shared類型的runner,如果您要創建該類型runner,只需按照以下方法準備信息即可,創建出來的runner就是所有倉庫都能使用的了:

  1. 以管理員身份登錄GitLab;
  2. 按照下圖紅框的順序取得gitlab urlregistration token

部署RitLab Runner

  1. 請確保當前可以通過kubectl命令在kubernetes進行常規操作;
  2. 創建名為gitlab-runner的namespace:
kubectl create namespace gitlab-runner
  1. 創建一個secret,把minio的access key和secret key存進去,在後面配置cache的時候會用到:
kubectl create secret generic s3access \
--from-literal=accesskey="access" \
--from-literal=secretkey="secret123456" -n gitlab-runner
  1. 用helm部署GitLab Runner之前,先把chart的倉庫添加到helm的倉庫列表中:
helm repo add gitlab https://charts.gitlab.io
  1. 下載GitLab Runner的chart:
helm fetch gitlab/gitlab-runner
  1. 當前目錄會多出一個文件gitlab-runner-0.18.0.tgz,解壓:
tar -zxvf gitlab-runner-0.18.0.tgz
  1. 解壓后是名為gitlab-runner的文件夾,內容如下圖所示,接下來要修改裏面的三個文件:
  2. 打開values.yaml,裏面有四處需要修改:
  3. 第一處,找到已被註釋掉的gitlabUrl參數位置,添加gitlabUrl的配置,其值就是前面在GitLab網頁取得的gitlab url參數,如下圖紅框:
  4. 第二處,找到已被註釋掉的runnerRegistrationToken參數位置,添加runnerRegistrationToken的配置,其值就是前面在GitLab網頁取得的registration token參數,如下圖紅框:
  5. 找到rbac的配置,將createclusterWideAccess的值都改成true(創建RBAC、創建容器gitlab-bastion用於管理job的容器):
  6. 設置此GitLab Runner的tagk8s,在pipeline腳本中可以通過指定tag為k8s,這樣pipeline就會在這個Gitlab Runner上允許:
  7. 找到cache的配置,在修改之前,cache的配置如下圖,可見值為空內容的大括號,其餘信息全部被註釋了:
  8. 修改后的cache配置如下圖,紅框1中原先的大括號已去掉,紅框2中的是去掉了註釋符號,內容不變,紅框3中填寫的是minio的訪問地址,紅框4中的是去掉了註釋符號,內容不變:
  9. 上圖紅框4中的s3CacheInsecure參數等於false表示對minio的請求為http(如果是true就是https),但實際證明,當前版本的chart中該配置是無效的,等到運行時還是會以https協議訪問,解決此問題的方法是修改templates目錄下的_cache.tpl文件,打開此文件,找到下圖紅框中的內容:
  10. 將上圖紅框中的內容替換成下面紅框中的樣子,即刪除原先的if判斷和對應的end這兩行,直接給CACHE_S3_INSECURE賦值:
  11. 接下來要修改的是templates/configmap.yaml文件,在這裏面將宿主機的docker的sock映射給runner executor,這樣job中的docker命令就會發到宿主機的docker daemon上,由宿主機來執行,打開templates/configmap.yaml,找到下圖位置,我們要在紅框1和紅框2之間添加一段內容:
  12. 要在上圖紅框1和紅框2之間添加的內容如下:
cat >>/home/gitlab-runner/.gitlab-runner/config.toml <<EOF
            [[runners.kubernetes.volumes.host_path]]
              name = "docker"
              mount_path = "/var/run/docker.sock"
              read_only = true
              host_path = "/var/run/docker.sock"
    EOF
  1. 添加上述內容后,整體效果如下,紅框中就是新增內容:
  2. 修改完畢,回到values.yam所在目錄,執行以下命令即可創建GitLab Runner:
helm install \
--name-template gitlab-runner \
-f values.yaml . \
--namespace gitlab-runner
  1. 檢查pod是否正常:
  2. 看pod日誌也並未發現異常:
  3. 回到GitLab的runner頁面,可見新增一個runner:

    至此,整個GitLab CI環境已部署完畢,接下來簡單的驗證環境是否OK;

驗證

  1. 在GitLab倉庫中,增加名為.gitlab-ci.yml的文件,內容如下:
# 設置執行鏡像
image: busybox:latest

# 整個pipeline有兩個stage
stages:
- build
- test

# 定義全局緩存,緩存的key來自分支信息,緩存位置是vendor文件夾
cache:
  key: ${CI_COMMIT_REF_SLUG}
  paths:
  - vendor/

before_script:
  - echo "Before script section"

after_script:
  - echo "After script section"

build1:
  stage: build
    tags:
  - k8s
  script:
    - echo "將內容寫入緩存"
    - echo "build" > vendor/hello.txt

test1:
  stage: test
  script:
    - echo "從緩存讀取內容"
    - cat vendor/hello.txt
  1. 提交上述腳本到GitLab,如下圖,可見pipeline會被觸發,狀態為pending是因為正在等待runner創建executor pod:
  2. 稍後就會執行成功,點開看結果:
  3. 點開build1的圖標,可見此job的輸出信息:
  4. 點開test1的圖標,可見對應的控制台輸出,上一個job寫入的數據被成功讀取:

    至此,GitLab Runner已經成功在kubernetes環境部署和運行,接下來的文章,我們會一起實戰將SpringBoot應用構建成docker鏡像並推送到Harbor;

歡迎關注我的公眾號:程序員欣宸

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

※教你寫出一流的銷售文案?

※超省錢租車方案

學界首次發現空污與腦癌有關 慎防奈米級「超細懸浮微粒」

環境資訊中心綜合外電;姜唯 編譯;林大利 審校

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

※教你寫出一流的銷售文案?

※超省錢租車方案