摘要:如果還沒(méi)有搭建好可以使用的,請(qǐng)先移步到這篇文章進(jìn)行搭建使用自動(dòng)部署服務(wù)一搭建篇目標(biāo)通過(guò)實(shí)現(xiàn)推送代碼后自動(dòng)部署基于的服務(wù)準(zhǔn)備工作獲取示例項(xiàng)目或者直接復(fù)制以下文件內(nèi)容獲取示例項(xiàng)目項(xiàng)目文件頁(yè)面文件鏡像文件部署文件部署腳本文件頁(yè)面文件項(xiàng)目很簡(jiǎn)單,
如果還沒(méi)有搭建好可以使用 Docker 的 Jenkins,請(qǐng)先移步到這篇文章進(jìn)行搭建
使用 Jenkins 自動(dòng)部署 Docker 服務(wù)(一、Jenkins 搭建篇) 目標(biāo)通過(guò) Jenkins 實(shí)現(xiàn)推送代碼后自動(dòng)部署基于 Docker 的服務(wù)準(zhǔn)備工作
獲取示例項(xiàng)目或者直接復(fù)制以下文件內(nèi)容
# 獲取示例項(xiàng)目 git clone https://github.com/kwkwc/jenkins_demo.git # 項(xiàng)目文件 ├── index.html # 頁(yè)面文件 ├── Dockerfile # 鏡像文件 ├── docker-compose.src.yml # Docker 部署文件 ├── deploy_jenkins.sh # 部署腳本 ├── Jenkinsfile # Jenkins Pipeline 文件頁(yè)面文件
項(xiàng)目很簡(jiǎn)單,就是一個(gè)靜態(tài)網(wǎng)頁(yè)index.html
鏡像文件Jenkins demo Jenkins demo
鏡像以 nginx 為基礎(chǔ)鏡像,然后復(fù)制 index.html 進(jìn)容器Dockerfile
FROM nginx:1.15.2 ENV REFRESHED_AT 2018-08-09 COPY ./index.html /usr/share/nginx/html/index.html RUN ln -sf /dev/stdout /var/log/nginx/access.log && ln -sf /dev/stderr /var/log/nginx/error.log EXPOSE 80 STOPSIGNAL SIGTERM CMD ["nginx", "-g", "daemon off;"]Docker 部署文件
設(shè)置了 8081 端口和部署失敗重試docker-compose.src.yml
version: "3.4" services: jenkins_demo: image: IMAGE_LATEST deploy: restart_policy: condition: on-failure expose: - "80" ports: - 8081:80部署腳本 deploy_jenkins.sh
#!/bin/bash # 容器名稱 CONTAINER="jenkins_demo" # 鏡像名稱(以日期時(shí)間為鏡像標(biāo)簽,防止重復(fù)) IMAGE=$CONTAINER":"$(date -d "today" +"%Y%m%d_%H%M%S") # 刪除滾動(dòng)更新殘留的容器 docker rm `docker ps -a | grep -w $CONTAINER"_"$CONTAINER | awk "{print $1}"` # 強(qiáng)制刪除滾動(dòng)更新殘留的鏡像 docker rmi --force `docker images | grep -w $CONTAINER | awk "{print $3}"` # 創(chuàng)建新鏡像 docker build -t $IMAGE . && # 刪除 docker-compose.jenkins.yml 文件,防止使用相同鏡像 rm -rf docker-compose.jenkins.yml && # 復(fù)制 docker-compose.src.yml 文件,防止污染原文件 cp docker-compose.src.yml docker-compose.jenkins.yml && # 替換鏡像名標(biāo)志位為最新鏡像 sed -i s%IMAGE_LATEST%$IMAGE%g docker-compose.jenkins.yml && # 使用 docker stack 啟動(dòng)服務(wù) docker stack deploy -c docker-compose.jenkins.yml $CONTAINER實(shí)現(xiàn)無(wú)工具自動(dòng)部署
我們暫時(shí)忘記 Jenkins,先看看無(wú)工具自動(dòng)部署是怎么實(shí)現(xiàn)的初始化 Docker Swarm 集群網(wǎng)絡(luò)
由于我們使用了 Docker Stack,他可用于實(shí)現(xiàn)滾動(dòng)更新,分布式集群,但依賴于 Docker Swarm 集群網(wǎng)絡(luò),直接使用會(huì)報(bào)錯(cuò),所以需要先初始化 Docker Swarm 集群網(wǎng)絡(luò)
# 初始化 Docker Swarm 集群網(wǎng)絡(luò) docker swarm init運(yùn)行部署腳本
./deploy_jenkins.sh查看鏡像
docker images查看容器
docker ps瀏覽器打開(kāi)
http://127.0.0.1:8081成功自動(dòng)部署 更改內(nèi)容
嘗試修改 index.html 內(nèi)容再運(yùn)行部署腳本 ./deploy_jenkins.sh效果 實(shí)現(xiàn) Jenkins 自動(dòng)部署
Jenkins 的自動(dòng)部署本來(lái)比較復(fù)雜,但是后來(lái)有了 Pipeline,一切都簡(jiǎn)單了,Pipeline 是 Jenkins 的一個(gè)插件,初始化 Jenkins 的時(shí)候會(huì)推薦安裝,如果沒(méi)有請(qǐng)自行安裝Jenkins Pipeline 文件
項(xiàng)目中如果有 Jenkinsfile 文件, Jenkins 檢測(cè)到就會(huì)自動(dòng)按 Jenkinsfile 寫的流程運(yùn)行命令,例如這個(gè) Jenkinsfile 文件里面寫的就是自動(dòng)幫我們運(yùn)行剛才的部署腳本Jenkinsfile
pipeline { agent none stages { stage("Deploy") { agent any steps { echo "Deploying" sh "./deploy_jenkins.sh" } } } }新建任務(wù)
輸入任務(wù)名稱,選擇流水線填寫信息
只需要填寫流水線里面的信息查看任務(wù)
"定義" 選擇 "Pipeline script from SCM"
"SCM" 選擇 "Git"
"Repository URL" 填寫 Git 倉(cāng)庫(kù)地址
選好 Git 分支
如果是私密倉(cāng)庫(kù),在 “Credentials” 那一欄添加賬號(hào)密碼然后選擇賬號(hào)就行
保存后回到主頁(yè)就可以看到我們新建的任務(wù),可以看到狀態(tài)、運(yùn)行情況等信息手動(dòng)構(gòu)建
點(diǎn)擊一下界面的立即構(gòu)建按鈕就可以開(kāi)始構(gòu)建了
設(shè)置構(gòu)建觸發(fā)器,例如每 30 分鐘查詢一次是否有更新,有則自動(dòng)構(gòu)建自動(dòng)構(gòu)建(主動(dòng)通知)
主動(dòng)通知需要安裝插件,這里以 Gitea 為例子,Gitea 使用的是 Gogs 的插件
"系統(tǒng)管理" --> "插件管理" --> "可選插件" 搜索 Gogs,勾選直接安裝,安裝成功后在項(xiàng)目配置里面會(huì)多出一個(gè) "Gogs Webhook" 選項(xiàng),不需要配置任何東西,安裝了就行
在 Gitea 的 Webhooks 中填寫下面的 URL 就可以實(shí)現(xiàn)推送代碼后主動(dòng)通知 Jenkins 自動(dòng)部署,其他基于 Git 的倉(cāng)庫(kù)設(shè)置一樣
http://127.0.0.1:8080/gogs-webhook/?job=jenkins_demo
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/27401.html
摘要:直接使用官方的鏡像一般會(huì)有兩個(gè)問(wèn)題導(dǎo)致不能正常自動(dòng)部署基于的服務(wù)。 直接使用 Jenkins 官方的鏡像一般會(huì)有兩個(gè)問(wèn)題導(dǎo)致不能正常自動(dòng)部署基于 Docker 的服務(wù)。 存在的問(wèn)題 官方的鏡像默認(rèn)不是使用 root 賬號(hào),雖然 Jenkins 可以正常啟動(dòng),但是因?yàn)闆](méi)有權(quán)限導(dǎo)致不能向宿主機(jī)寫文件 Jenkins 基于 Docker 搭建,雖然 Jenkins 同樣可以正常啟動(dòng),但不能...
摘要:?jiǎn)栴}背景公司初創(chuàng)技術(shù)團(tuán)隊(duì),沒(méi)有任何基礎(chǔ)設(shè)施的情況下,需要搭建一系列管理以及自動(dòng)化部署等工具所以引發(fā)了下面一系列的部署過(guò)程,歷時(shí)兩天,中間也是碰到各種問(wèn)題,但最終把基本工具全部搭建成功,耶,下面帶大家一起看下此次搭建過(guò)程。 問(wèn)題背景 公司初創(chuàng)技術(shù)團(tuán)隊(duì),沒(méi)有任何基礎(chǔ)設(shè)施的情況下,需要搭建一系列code管理以及自動(dòng)化部署等工具....所以引發(fā)了下面一系列的部署過(guò)程,歷時(shí)兩天,中間也是碰到各種...
摘要:從開(kāi)始搭建自動(dòng)部署環(huán)境續(xù)前言上一篇從開(kāi)始搭建自動(dòng)部署環(huán)境雖然環(huán)境搭建起來(lái)了,但是配置少了一部分步驟。創(chuàng)建本地倉(cāng)庫(kù)參考新建項(xiàng)目項(xiàng)目是我寫的一個(gè)用來(lái)測(cè)試環(huán)境的項(xiàng)目,代碼托管在上。 從0開(kāi)始搭建自動(dòng)部署環(huán)境(續(xù)) 前言 上一篇從0開(kāi)始搭建自動(dòng)部署環(huán)境雖然環(huán)境搭建起來(lái)了,但是配置少了一部分步驟。本來(lái)應(yīng)該寫到上一篇中,但是這樣做篇幅過(guò)長(zhǎng)了。另外,此篇會(huì)使用自動(dòng)部署一個(gè)同步在Github上的Spr...
摘要:從開(kāi)始搭建自動(dòng)部署環(huán)境續(xù)前言上一篇從開(kāi)始搭建自動(dòng)部署環(huán)境雖然環(huán)境搭建起來(lái)了,但是配置少了一部分步驟。創(chuàng)建本地倉(cāng)庫(kù)參考新建項(xiàng)目項(xiàng)目是我寫的一個(gè)用來(lái)測(cè)試環(huán)境的項(xiàng)目,代碼托管在上。 從0開(kāi)始搭建自動(dòng)部署環(huán)境(續(xù)) 前言 上一篇從0開(kāi)始搭建自動(dòng)部署環(huán)境雖然環(huán)境搭建起來(lái)了,但是配置少了一部分步驟。本來(lái)應(yīng)該寫到上一篇中,但是這樣做篇幅過(guò)長(zhǎng)了。另外,此篇會(huì)使用自動(dòng)部署一個(gè)同步在Github上的Spr...
摘要:目前官方已開(kāi)始推薦使用替代之前的做為基礎(chǔ)鏡像環(huán)境。包括鏡像下載速度加快,鏡像安全性提高,主機(jī)之間的切換更方便,占用更少磁盤空間等。 有了前幾篇的基礎(chǔ)后,我們現(xiàn)在已經(jīng)能 docker 篇: 構(gòu)建 docker 鏡像 上傳私有倉(cāng)庫(kù) 拉取私有鏡像 啟動(dòng)容器 jenkins 篇: 配置 pipeline 觸發(fā) pipeline 接下來(lái)就可以結(jié)合兩者,用 jenkins + docker...
閱讀 2566·2021-11-22 12:05
閱讀 3453·2021-10-14 09:42
閱讀 1686·2021-07-28 00:15
閱讀 1989·2019-08-30 11:08
閱讀 1487·2019-08-29 17:31
閱讀 932·2019-08-29 16:42
閱讀 2340·2019-08-26 11:55
閱讀 2119·2019-08-26 11:49