摘要:如果還沒有搭建好可以使用的,請先移步到這篇文章進(jìn)行搭建使用自動部署服務(wù)一搭建篇目標(biāo)通過實(shí)現(xiàn)推送代碼后自動部署基于的服務(wù)準(zhǔn)備工作獲取示例項(xiàng)目或者直接復(fù)制以下文件內(nèi)容獲取示例項(xiàng)目項(xiàng)目文件頁面文件鏡像文件部署文件部署腳本文件頁面文件項(xiàng)目很簡單,
如果還沒有搭建好可以使用 Docker 的 Jenkins,請先移步到這篇文章進(jìn)行搭建
使用 Jenkins 自動部署 Docker 服務(wù)(一、Jenkins 搭建篇) 目標(biāo)通過 Jenkins 實(shí)現(xiàn)推送代碼后自動部署基于 Docker 的服務(wù)準(zhǔn)備工作
獲取示例項(xiàng)目或者直接復(fù)制以下文件內(nèi)容
# 獲取示例項(xiàng)目 git clone https://github.com/kwkwc/jenkins_demo.git # 項(xiàng)目文件 ├── index.html # 頁面文件 ├── Dockerfile # 鏡像文件 ├── docker-compose.src.yml # Docker 部署文件 ├── deploy_jenkins.sh # 部署腳本 ├── Jenkinsfile # Jenkins Pipeline 文件頁面文件
項(xiàng)目很簡單,就是一個靜態(tài)網(wǎng)頁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") # 刪除滾動更新殘留的容器 docker rm `docker ps -a | grep -w $CONTAINER"_"$CONTAINER | awk "{print $1}"` # 強(qiá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 啟動服務(wù) docker stack deploy -c docker-compose.jenkins.yml $CONTAINER實(shí)現(xiàn)無工具自動部署
我們暫時(shí)忘記 Jenkins,先看看無工具自動部署是怎么實(shí)現(xiàn)的初始化 Docker Swarm 集群網(wǎng)絡(luò)
由于我們使用了 Docker Stack,他可用于實(shí)現(xiàn)滾動更新,分布式集群,但依賴于 Docker Swarm 集群網(wǎng)絡(luò),直接使用會報(bào)錯,所以需要先初始化 Docker Swarm 集群網(wǎng)絡(luò)
# 初始化 Docker Swarm 集群網(wǎng)絡(luò) docker swarm init運(yùn)行部署腳本
./deploy_jenkins.sh查看鏡像
docker images查看容器
docker ps瀏覽器打開
http://127.0.0.1:8081成功自動部署 更改內(nèi)容
嘗試修改 index.html 內(nèi)容再運(yùn)行部署腳本 ./deploy_jenkins.sh效果 實(shí)現(xiàn) Jenkins 自動部署
Jenkins 的自動部署本來比較復(fù)雜,但是后來有了 Pipeline,一切都簡單了,Pipeline 是 Jenkins 的一個插件,初始化 Jenkins 的時(shí)候會推薦安裝,如果沒有請自行安裝Jenkins Pipeline 文件
項(xiàng)目中如果有 Jenkinsfile 文件, Jenkins 檢測到就會自動按 Jenkinsfile 寫的流程運(yùn)行命令,例如這個 Jenkinsfile 文件里面寫的就是自動幫我們運(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 倉庫地址
選好 Git 分支
如果是私密倉庫,在 “Credentials” 那一欄添加賬號密碼然后選擇賬號就行
保存后回到主頁就可以看到我們新建的任務(wù),可以看到狀態(tài)、運(yùn)行情況等信息手動構(gòu)建
點(diǎn)擊一下界面的立即構(gòu)建按鈕就可以開始構(gòu)建了
設(shè)置構(gòu)建觸發(fā)器,例如每 30 分鐘查詢一次是否有更新,有則自動構(gòu)建自動構(gòu)建(主動通知)
主動通知需要安裝插件,這里以 Gitea 為例子,Gitea 使用的是 Gogs 的插件
"系統(tǒng)管理" --> "插件管理" --> "可選插件" 搜索 Gogs,勾選直接安裝,安裝成功后在項(xiàng)目配置里面會多出一個 "Gogs Webhook" 選項(xiàng),不需要配置任何東西,安裝了就行
在 Gitea 的 Webhooks 中填寫下面的 URL 就可以實(shí)現(xiàn)推送代碼后主動通知 Jenkins 自動部署,其他基于 Git 的倉庫設(shè)置一樣
http://127.0.0.1:8080/gogs-webhook/?job=jenkins_demo
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/27401.html
摘要:直接使用官方的鏡像一般會有兩個問題導(dǎo)致不能正常自動部署基于的服務(wù)。 直接使用 Jenkins 官方的鏡像一般會有兩個問題導(dǎo)致不能正常自動部署基于 Docker 的服務(wù)。 存在的問題 官方的鏡像默認(rèn)不是使用 root 賬號,雖然 Jenkins 可以正常啟動,但是因?yàn)闆]有權(quán)限導(dǎo)致不能向宿主機(jī)寫文件 Jenkins 基于 Docker 搭建,雖然 Jenkins 同樣可以正常啟動,但不能...
摘要:問題背景公司初創(chuàng)技術(shù)團(tuán)隊(duì),沒有任何基礎(chǔ)設(shè)施的情況下,需要搭建一系列管理以及自動化部署等工具所以引發(fā)了下面一系列的部署過程,歷時(shí)兩天,中間也是碰到各種問題,但最終把基本工具全部搭建成功,耶,下面帶大家一起看下此次搭建過程。 問題背景 公司初創(chuàng)技術(shù)團(tuán)隊(duì),沒有任何基礎(chǔ)設(shè)施的情況下,需要搭建一系列code管理以及自動化部署等工具....所以引發(fā)了下面一系列的部署過程,歷時(shí)兩天,中間也是碰到各種...
摘要:從開始搭建自動部署環(huán)境續(xù)前言上一篇從開始搭建自動部署環(huán)境雖然環(huán)境搭建起來了,但是配置少了一部分步驟。創(chuàng)建本地倉庫參考新建項(xiàng)目項(xiàng)目是我寫的一個用來測試環(huán)境的項(xiàng)目,代碼托管在上。 從0開始搭建自動部署環(huán)境(續(xù)) 前言 上一篇從0開始搭建自動部署環(huán)境雖然環(huán)境搭建起來了,但是配置少了一部分步驟。本來應(yīng)該寫到上一篇中,但是這樣做篇幅過長了。另外,此篇會使用自動部署一個同步在Github上的Spr...
摘要:從開始搭建自動部署環(huán)境續(xù)前言上一篇從開始搭建自動部署環(huán)境雖然環(huán)境搭建起來了,但是配置少了一部分步驟。創(chuàng)建本地倉庫參考新建項(xiàng)目項(xiàng)目是我寫的一個用來測試環(huán)境的項(xiàng)目,代碼托管在上。 從0開始搭建自動部署環(huán)境(續(xù)) 前言 上一篇從0開始搭建自動部署環(huán)境雖然環(huán)境搭建起來了,但是配置少了一部分步驟。本來應(yīng)該寫到上一篇中,但是這樣做篇幅過長了。另外,此篇會使用自動部署一個同步在Github上的Spr...
摘要:目前官方已開始推薦使用替代之前的做為基礎(chǔ)鏡像環(huán)境。包括鏡像下載速度加快,鏡像安全性提高,主機(jī)之間的切換更方便,占用更少磁盤空間等。 有了前幾篇的基礎(chǔ)后,我們現(xiàn)在已經(jīng)能 docker 篇: 構(gòu)建 docker 鏡像 上傳私有倉庫 拉取私有鏡像 啟動容器 jenkins 篇: 配置 pipeline 觸發(fā) pipeline 接下來就可以結(jié)合兩者,用 jenkins + docker...
閱讀 2624·2021-11-22 12:05
閱讀 3505·2021-10-14 09:42
閱讀 1739·2021-07-28 00:15
閱讀 2040·2019-08-30 11:08
閱讀 1546·2019-08-29 17:31
閱讀 975·2019-08-29 16:42
閱讀 2392·2019-08-26 11:55
閱讀 2165·2019-08-26 11:49