使用Docker+Jenkins自動(dòng)構(gòu)建部署
本文介紹了Docker+Jenkins自動(dòng)構(gòu)建部署,分享給大家,具體如下:
環(huán)境
- 阿里云ESC,宿主機(jī)服務(wù)器安裝Docker,在安全規(guī)則中確認(rèn)8080端口開(kāi)啟。
- 客戶端mac
運(yùn)行jenkins
運(yùn)行jenkins容器
在主機(jī)上創(chuàng)建目錄,并添加讀寫權(quán)限以便jenkins應(yīng)用運(yùn)行時(shí)讀寫文件,如:
$ mkdir -p /var/jenkins_node $ chmod 777 /var/jenkins_node
拉取jenkins鏡像:docker pull jenkins
,當(dāng)前是2.60.3
版。并運(yùn)行:
docker run -d --name myjenkins -p 8080:8080 -p 50000:50000 -v <your_jenkins_path>:/var/jenkins_home jenkins
將之前的目錄掛載為數(shù)據(jù)卷。<your_jenkins>
替換為你的目錄名,路徑需要是絕對(duì)路徑。
等待幾十秒,查看jenkins_node目錄,確認(rèn)是否有jenkins應(yīng)用生成的文件。
通過(guò)http://you_host:8080
登陸查看。是否出現(xiàn)Getting Started界面。
設(shè)置賬戶及SSH登陸
在Getting Started界面會(huì)需要初始的密碼Unlock Jenkins。
密碼會(huì)在輸出終端,也可根據(jù)頁(yè)面提示到容器的jenkins_home中查找。
所以你可以
docker logs myjenkins # 或者進(jìn)入容器 docker exec -t myjenkins /bin/bash
有了密碼,輸入后安裝建議的插件。
完畢后,根據(jù)提示設(shè)置登陸賬戶。
安裝Publish Over SSH插件
首頁(yè) -> 點(diǎn)擊系統(tǒng)管理 -> 管理插件 ->可選插件 -> 過(guò)濾:ssh -> 選擇Publish Over SSH插件,點(diǎn)擊直接安裝。
設(shè)置服務(wù)器SSH信息
首先在容器中生成rsa密鑰:
# 從宿主機(jī)客戶進(jìn)入容器,目前容器名myjenkins,也可通過(guò)docker ps 查看 $ docker exec -it myjenkins /bin/bash # 進(jìn)入容器后建立.ssh目錄,創(chuàng)建密鑰文件私鑰id_rsa,公鑰id_rsa.pub ~ mkdir ~/.ssh && cd ~/.ssh ~ ssh-keygen -t rsa # 一直回車即可
添加公鑰到宿主機(jī)
將id_rsa.pub中字符串添加到authorized_keys文件末尾,重啟ssh服務(wù)sudo service ssh restart
注意宿主機(jī)是否開(kāi)啟ssh服務(wù)。
可以在容器終端中使用下面的命令添加到宿主機(jī)中。也可手動(dòng)復(fù)制id_rsa.pub到宿主機(jī)的.ssh/authorized_keys文件中。
ssh-copy-id -i ~/.ssh/id_rsa.pub <username>@<host>
需要修改目標(biāo)服務(wù)器的ssh配置文件,配置文件為/etc/ssh/sshd_config。設(shè)置ssh-server允許使用私鑰和公鑰對(duì)的方式登錄,然后使用sudo /etc/init.d/ssh restart
命令重啟ssh服務(wù)。
添加私鑰
jenkins首頁(yè),系統(tǒng)管理 -> 系統(tǒng)設(shè)置 -> 下拉,找到Publish over SSH,填寫Key 和 SSH Server -> 保存
高級(jí)選項(xiàng)能夠配置ssh服務(wù)器端口和超時(shí)。Test可測(cè)試,顯示success
配置成功。
項(xiàng)目配置
首先,新建一個(gè)任務(wù)。填寫項(xiàng)目名稱。
選擇源碼管理為:Git,填寫項(xiàng)目庫(kù)的URL。私有項(xiàng)目需要添加Git賬號(hào)。
構(gòu)建環(huán)境:選擇Send files or execute commands over SSH after the build runs
,選擇服務(wù)器,以及添加Exec command
。保存。
# 根據(jù)你的項(xiàng)目需要編寫 sudo docker stop <node> || true \ && sudo docker rm <node> || true \ && cd /var/jenkins_node/workspace/<node> \ && sudo docker build --rm --no-cache=true -t <node> - < Dockerfile \ && sudo docker run -d --name <node> -p 3000:3000 -v /var/jenkins_node/workspace/node:/home/project <node>
端口設(shè)置的3000,也可以另行設(shè)置-p 宿主機(jī)端口:容器端口
,記得確認(rèn)服務(wù)器端口權(quán)限是否開(kāi)啟。
Dockerfile
# 根據(jù)你的項(xiàng)目需要編寫 FROM node RUN mkdir -p /var/www/html/ RUN npm install -g yarn WORKDIR /var/www/html EXPOSE 3000 CMD ["npm","start"]
ps: npm install -g cnpm --registry=https://registry.npm.taobao.org
返回首頁(yè),選擇項(xiàng)目,立即構(gòu)建。成功后可以通過(guò)http://you_host:3000
端口查看項(xiàng)目。
配置webhook
配置webhook,實(shí)現(xiàn)自動(dòng)部署
獲取API tonken:首頁(yè) -> 用戶 -> 選擇當(dāng)前的用戶 -> 設(shè)置 -> 在API Tonken 項(xiàng)中點(diǎn)擊Show API Token...
添加令牌:返回首頁(yè) -> 項(xiàng)目 -> 配置 -> 構(gòu)建觸發(fā)器 -> 選擇 "觸發(fā)遠(yuǎn)程構(gòu)建" ->粘貼"API Token"內(nèi)容到"身份驗(yàn)證令牌"
登陸代碼托管平臺(tái),找到你的項(xiàng)目,選擇管理,選擇webhook,添加URL,格式http://<you_host>:<port>/job/<object_name>/build?token=<API Token>
設(shè)置jenkins安全策略
首頁(yè) -> 系統(tǒng)管理 -> Configure Global Security ->
授權(quán)策略,勾選Allow anonymous read access
。
至此,完成自動(dòng)化的構(gòu)建和部署。當(dāng)你推送代碼后就會(huì)實(shí)現(xiàn)自動(dòng)構(gòu)建,部署。
部署錯(cuò)誤查找
代碼推送和webhook的問(wèn)題不大,照著例子寫不會(huì)出錯(cuò)。
容器出錯(cuò)的是鏡像構(gòu)建和鏡像運(yùn)行,以及容器間通信的問(wèn)題。
- 鏡像構(gòu)建:查看jenkins主頁(yè)-->查看項(xiàng)目-->最近一次的
構(gòu)建歷史
-->查看Console Output
,查看控制臺(tái)輸出
。這里可以看到是哪一步出錯(cuò)。一般Sending build context to Docker daemon
之前是jenkins命令問(wèn)題,之后是Dockerfile問(wèn)題。 - 鏡像運(yùn)行:如果Console顯示鏡像構(gòu)建成功(也可
docker images
查看),但運(yùn)行失敗,或容器運(yùn)行后退出,如果代碼本地運(yùn)行良好,一般是CMD啟動(dòng)命令錯(cuò)誤,前臺(tái)運(yùn)行一下容器,docker run -it --name <container_name> <image_name> /bin/bash
,進(jìn)入容器后手動(dòng)運(yùn)行CMD,看看日志輸出。另,docker exec -t <container_name> /bin/bash
可以進(jìn)入運(yùn)行中的容器,能方便的查看代碼;docker logs <container_name>
顯示運(yùn)行的日志輸出。
到此這篇關(guān)于使用Docker+Jenkins自動(dòng)構(gòu)建部署的文章就介紹到這了,更多相關(guān)Docker Jenkins自動(dòng)構(gòu)建部署內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker之自定義網(wǎng)絡(luò)實(shí)現(xiàn)
大家好,本篇文章主要講的是Docker之自定義網(wǎng)絡(luò)實(shí)現(xiàn),感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12Docker?Desktop?啟用?Kubernetes?失敗后處理方案
?在setting -> Kubernetes 中,選中 Enable Kubernetes 后,長(zhǎng)時(shí)間顯示 Starting ...? ,在Images中顯示幾個(gè)自動(dòng)下載的鏡像后,顯示 Start Kubernetes failed,這篇文章主要介紹了Docker?Desktop啟用Kubernetes失敗后處理方法,需要的朋友可以參考下2023-08-08Docker 簡(jiǎn)單部署 ElasticSearch的實(shí)現(xiàn)方法
這篇文章主要介紹了Docker 簡(jiǎn)單部署 ElasticSearch的實(shí)現(xiàn)方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-09-09Docker中鏡像構(gòu)建文件Dockerfile與相關(guān)命令的詳細(xì)介紹
這篇文章主要介紹了Docker中鏡像構(gòu)建文件Dockerfile與相關(guān)命令的相關(guān)資料,文中介紹的很詳細(xì),相信對(duì)大家具有一定的參考價(jià)值,有需要的朋友們下面來(lái)一起看看吧。2017-02-02Docker Elasticsearch集群部署的操作過(guò)程
這篇文章主要介紹了Docker Elasticsearch集群部署的操作過(guò)程,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-03-03Docker部署Django+Mysql+Redis+Gunicorn+Nginx的實(shí)現(xiàn)
這篇文章主要介紹了Docker 部署 Django+Mysql+Redis+Gunicorn+Nginx,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11Docker?部署分布式搜索引擎?Elastic?Search的詳細(xì)過(guò)程
Elasticsearch是一款非常強(qiáng)大的開(kāi)源搜索引擎,具備非常多強(qiáng)大功能,可以幫助我們從海量數(shù)據(jù)中快速找到需要的內(nèi)容,這篇文章主要介紹了Docker?部署分布式搜索引擎?Elastic?Search,需要的朋友可以參考下2023-02-02如何在一臺(tái)服務(wù)器上使用docker運(yùn)行kafka集群
文章詳細(xì)介紹了如何在一臺(tái)服務(wù)器上使用Docker運(yùn)行Kafka集群,包括拉取鏡像、創(chuàng)建網(wǎng)絡(luò)、啟動(dòng)Kafka容器、檢查運(yùn)行狀態(tài)、編寫啟動(dòng)和關(guān)閉腳本、進(jìn)入容器檢查、故障排查以及啟動(dòng)生產(chǎn)者和消費(fèi)者等步驟,感興趣的朋友跟隨小編一起看看吧2025-01-01