Jenkins agent-Nodejs項(xiàng)目實(shí)踐

前言

上篇說了基于docker或k8s動(dòng)態(tài)創(chuàng)建agent的環(huán)境荠瘪,實(shí)際項(xiàng)目中針對(duì)后端java項(xiàng)目通過agent流水線進(jìn)行簡單發(fā)布茵休。這篇將對(duì)前端node項(xiàng)目發(fā)布展開

思路

  • 安裝node環(huán)境
  • 拉代碼
  • yarn build構(gòu)建出靜態(tài)文件目錄
  • 將構(gòu)建出來的目錄打成tar包
  • 發(fā)送到遠(yuǎn)程機(jī)器(nginx)的上傳目錄下
  • 備份遠(yuǎn)程機(jī)器(nginx)下此項(xiàng)目web目錄
  • 將上傳目錄下的tar包解壓至web發(fā)布目錄--實(shí)現(xiàn)更新發(fā)布

基于以上步驟,如果jenkins本機(jī)去做部署造成,那需要jenkins宿主機(jī)需要有node環(huán)境才能打包的显熏,并且可能不同項(xiàng)目要用到不同版本的Nodejs,到時(shí)候還需要對(duì)版本進(jìn)行切換來使用晒屎。如果用Jenkins agent發(fā)布喘蟆,就能在一定程度上避免這些問題缓升。 啟用臨時(shí)node環(huán)境的agent容器做構(gòu)建,構(gòu)建完刪除蕴轨,不需要jenkins宿主機(jī)安裝node港谊。創(chuàng)建多個(gè)nodejs版本的pod模板,在不同項(xiàng)目中配置所需要的版本agent pod即可橙弱。

項(xiàng)目實(shí)踐

針對(duì)兩個(gè)項(xiàng)目health-tools(Node-16.0.0)和bottom-library(Node-12.20.2) 兩個(gè)node版本分別演示歧寺;

  1. jenkins--節(jié)點(diǎn)管理--配置pod模板。我這里配置兩個(gè)模板用來標(biāo)識(shí)nodejs16.0.0和nodejs12.20.2
4-node實(shí)踐-模板1.png
  1. 模板配置與容器配置

兩個(gè)pod模板區(qū)別只在于標(biāo)簽標(biāo)識(shí)棘脐,容器名斜筐,鏡像名的不用。其余設(shè)置都一樣的

4-node實(shí)踐-容器模板1.png
4-node實(shí)踐-容器模板2.png
4-node實(shí)踐-容器模板3.png

保存退出荆残。

  1. 新建一個(gè)流水線
    大致寫一下:
    依賴不同node版本的任務(wù)在調(diào)度時(shí)奴艾,只需 控制agentpod標(biāo)簽即可label 'node1600'
 pipeline {
    agent {
         label 'node12202' 
    }
    options {
        skipDefaultCheckout()
    }
    environment {
        BUILD_ENV = "beta"
        APP_NAME = "bottom-library"
        APP_ENV = "test"
        GROUP = "eyun"
        UPLOAD_DIR = "/mnt/opt/upload/${APP_ENV}/${GROUP}"
        BACK_DIR = "${UPLOAD_DIR}/bakup/${APP_NAME}"
        WEB_DIR = "/mnt/opt/web/${APP_ENV}/${GROUP}"
    } 

    stages {
        stage('get code'){
            steps{
                    git branch: 'tianye-test', credentialsId: '248e1fa0-6165-4a81-8297-4107e413207c', url: 'https://gitlab.xxx.com/yiyun/bottom-library.git'
            }
        }
        stage('npm build'){
            steps{
                container('node12202') {
                       sh 'yarn cache clean && yarn --update-checksums'
                       sh 'yarn config set registry https://registry.npm.taobao.org'
                       sh 'yarn'
                       sh 'yarn run build:${BUILD_ENV}'
                }
            }
        }
        stage('build tar package'){
            steps{
                script{
                    sh 'tar cf ${APP_NAME}.tar ${APP_NAME}'
                }
            }
        }
        stage('deploy to nginx-server'){
            steps {   
               script{
                    sh 'ssh root@k8s011.test.hw "mkdir -p ${UPLOAD_DIR} ;mkdir -p ${BACK_DIR}; mkdir -p ${WEB_DIR}"'
                    sh 'scp ${APP_NAME}.tar root@k8s011.test.hw:${UPLOAD_DIR}'
                    sh 'ssh root@k8s011.test.hw "if [ -d ${WEB_DIR}/${APP_NAME} ];then mv ${WEB_DIR}/${APP_NAME} ${BACK_DIR}/$(date +%Y%m%d-%H%M%S);fi;cd ${UPLOAD_DIR} ; tar xf ${APP_NAME}.tar -C ${WEB_DIR}/"'
                }
            }
        }
    }
}

這里在最后一步可直接用shell寫,這樣需要自己提前在做一遍免密:將.ssh文件掛載到agent卷中内斯。
更好的方法是用插件Publish over SSH:

4.下載安裝插件Publish over SSH (略)

5. 配置遠(yuǎn)程機(jī)器

jenkins系統(tǒng)管理-全局設(shè)置


5-node實(shí)踐-ssh插件配置.png

6. 流水線代碼生成

回到pipeline的job中蕴潦,點(diǎn)擊流水線語法,選擇 Publish over SSH

5-node實(shí)踐-ssh片段配置1.png
5-node實(shí)踐-ssh片段配置2.png

生成的片段俘闯,覆蓋之前的shell命令

        stage('deploy to nginx-server'){
            steps {   
               sshPublisher(publishers: [sshPublisherDesc(configName: 'h5-agent-to-k8s011', sshCredentials: [encryptedPassphrase: '{AQAAABAAAAAg+IOUqK/AGVv8s+ZyE/Lxev25B6gxvMC1fr3L+dqa/QljF8a35njuiiT+zy17CFgg}', key: '', keyPath: '', username: 'root'], transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "mkdir -p ${UPLOAD_DIR} ${BACK_DIR} ${WEB_DIR};if [ -d ${WEB_DIR}/${APP_NAME} ];then DATE_FODER=`date +%Y%m%d-%H%M%S`;mv ${WEB_DIR}/${APP_NAME} ${BACK_DIR}/\${DATE_FODER};fi;cd ${UPLOAD_DIR}; tar xf ${APP_NAME}.tar -C ${WEB_DIR}/", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '${UPLOAD_DIR}', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '${APP_NAME}.tar')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: true)])
            }
        }

7. 測試構(gòu)建

node1600和node12202的兩個(gè)任務(wù)同時(shí)構(gòu)建

6-node實(shí)踐-結(jié)果1.png

結(jié)果成功


6-node實(shí)踐-結(jié)果2.png

——————————————————————————————————————————————

注意事項(xiàng):

a. 發(fā)送文件的形式潭苞,插件片段和原生ssh命令
b. 利用sshpublish,agent去執(zhí)行的時(shí)候用賬號(hào)密碼認(rèn)證最方便
c. 免密可以將宿主機(jī)提前打通真朗,再用卷的形式將.ssh掛載到容器中
d. pipeline中引用變量需要注意""和'',如果在sh中引用jenkins上定義的變量sh用"";這其中如果在這個(gè)sh語句中在摻雜定義shell中的變量 需要加一個(gè)反斜杠\,如\${shell_var}

————————————————————————————————————————————————

To Do List :

  1. node構(gòu)建時(shí)的依賴目錄掛載出來此疹,減少構(gòu)建時(shí)間
  2. job的workspace掛載出來,省去每次都重新去拉代碼
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末遮婶,一起剝皮案震驚了整個(gè)濱河市蝗碎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌旗扑,老刑警劉巖蹦骑,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異臀防,居然都是意外死亡眠菇,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門袱衷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來捎废,“玉大人,你說我怎么就攤上這事致燥〉橇疲” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵篡悟,是天一觀的道長谜叹。 經(jīng)常有香客問我匾寝,道長,這世上最難降的妖魔是什么荷腊? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任艳悔,我火速辦了婚禮,結(jié)果婚禮上女仰,老公的妹妹穿的比我還像新娘猜年。我一直安慰自己,他們只是感情好疾忍,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布乔外。 她就那樣靜靜地躺著,像睡著了一般一罩。 火紅的嫁衣襯著肌膚如雪杨幼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天聂渊,我揣著相機(jī)與錄音差购,去河邊找鬼。 笑死汉嗽,一個(gè)胖子當(dāng)著我的面吹牛欲逃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播饼暑,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼稳析,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了弓叛?” 一聲冷哼從身側(cè)響起彰居,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎撰筷,沒想到半個(gè)月后裕菠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡闭专,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了旧烧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片影钉。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖掘剪,靈堂內(nèi)的尸體忽然破棺而出平委,到底是詐尸還是另有隱情,我是刑警寧澤夺谁,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布廉赔,位于F島的核電站肉微,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蜡塌。R本人自食惡果不足惜碉纳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一残揉、第九天 我趴在偏房一處隱蔽的房頂上張望澳化。 院中可真熱鬧泵三,春花似錦钾麸、人聲如沸竖伯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽旧巾。三九已至房资,卻和暖如春蜕劝,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背轰异。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國打工岖沛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人溉浙。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓烫止,卻偏偏與公主長得像,于是被迫代替她去往敵國和親戳稽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子馆蠕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容