本地怎樣上傳自己做的網(wǎng)站seo優(yōu)化價(jià)格
1. 環(huán)境說明
環(huán)境 A:
- jenkins 版本:2.253
- 使用 systemctl 管理的 jenkins 服務(wù)
環(huán)境 B:
可以上網(wǎng)的機(jī)器,裝有 docker-compose
docker 和 docker-compose 安裝,這里都略了。
2. 安裝舊版本
2.1 環(huán)境 A jenkins 目錄打包文件
打包需要的文件放在 /tmp 目錄下待下載:
/home/jenkins/ # jenkins 數(shù)據(jù)目錄
tar -cvf jenkins.tar --exclude='caches' --exclude='jobs' --exclude='logs' --exclude='nodes' --exclude='workspace' *
mv jenkins.tar /tmp/
然后把 jenkins.tar
下載,并傳輸?shù)?B 環(huán)境機(jī)器上。
2.2 環(huán)境 B 機(jī)器安裝舊版本 jenkins
在 B 環(huán)境機(jī)器上,上傳下載的 jenkins.tar
到 /tmp/
下,解壓準(zhǔn)備好 jenkins_home
。
mkdir -p /data/tmp/jenkins/data
cd /data/tmp/jenkins/data
tar -xvf /tmp/jenkins.tar
cd ../..
chown 1000.1000 -R jenkins/
使用 docker-compose 安裝舊版本 jenkins。
/data/tmp/docker-compose.yml
:
version: '3.1'
networks:app:services:jenkins:image: harbor.ygqygq2.com/proxy/jenkins/jenkins:2.253-centos7restart: always# user: rootnetworks:- appenvironment:- TZ=Asia/Shanghai- JAVA_OPTS=-Duser.timezone=Asia/Shanghai- JENKINS_ARGS="--sessionTimeout=86400"volumes:- ./jenkins/sudoers.d:/etc/sudoers.d- ./jenkins/data:/var/jenkins_home#- ./jenkins/war:/usr/share/jenkins- ./jenkins/caches:/caches- /var/run/docker.sock:/var/run/docker.sockports:- "8090:8080"
啟動(dòng),并瀏覽器登錄 B 環(huán)境,注意端口
cd /data/tmp
docker-compose up -d
docker-compose ps
使用環(huán)境 A 的 jenkins 管理員用戶密碼,在瀏覽器登錄后,滑到最底部查看 jenkins 版本,看是否和舊版本一致。
3. 環(huán)境 B jenkins 升級(jí)插件
前面登錄 jenkins 后,如果版本和舊版本一致,則成功啟動(dòng)。進(jìn)入插件升級(jí)管理界面,先選擇 “全選” 插件升級(jí),但不勾選 “安裝完成后重啟Jenkins”。
然后編輯 /data/tmp/docker-compose.yml
,修改鏡像 tag 為當(dāng)前最新穩(wěn)定版,比如當(dāng)前為 2.452.3-lts
version: '3.1'
networks:app:services:jenkins:image: harbor.ygqygq2.com/proxy/jenkins/jenkins:2.452.3-ltsrestart: always# user: rootnetworks:- appenvironment:- TZ=Asia/Shanghai- JAVA_OPTS=-Duser.timezone=Asia/Shanghai- JENKINS_ARGS="--sessionTimeout=86400"volumes:- ./jenkins/sudoers.d:/etc/sudoers.d- ./jenkins/data:/var/jenkins_home#- ./jenkins/war:/usr/share/jenkins- ./jenkins/caches:/caches- /var/run/docker.sock:/var/run/docker.sockports:- "8090:8080"
重啟容器:
cd /data/tmp
docker-compose up -d
docker-compose ps
4. 環(huán)境 B jenkins 問題處理
docker logs -f
查看日志,并且看瀏覽器是否能訪問和登錄。
- 如果遇到訪問和登錄問題,一般是插件不兼容,查看日志,把不兼容的插件文件從
/data/tmp/jenkins/data/plugins/
插件目錄中移出去,并且使用 docker 命令手動(dòng)重啟容器,直到能登錄并且能更新插件為止;- 根據(jù)移出去的插件名再從插件管理界面搜索安裝;
- 最后把插件再升級(jí)到兼容版本最新;
- 看看插件管理界面有什么提示和未啟動(dòng)的插件原因;
比如:
因?yàn)?LTS 的版本更新較慢,插件是跟著最新版本的,有時(shí)候會(huì)不兼容 LTS 版本。所以,使用 war 包方式將 jenkins 升級(jí)。
先把原 war 包目錄拷出來備份
# 56 是 docker ps 看到的容器 id
docker cp 56:/usr/share/jenkins jenkins/war_bak
下載最新版本 jenkins war包到 /data/tmp/jenkins/war/
下
mkdir -p /data/tmp/jenkins/war/ref
wget https://updates.jenkins.io/download/war/2.467/jenkins.war -O /data/tmp/jenkins/war/jenkins.war
chown 1000.1000 -R /data/tmp/jenkins/war/
取消 /data/tmp/docker-compose.yml
中 war 目錄那行的注釋,讓最新 war 包掛載進(jìn)去。
version: '3.1'
networks:app:services:jenkins:image: harbor.ygqygq2.com/proxy/jenkins/jenkins:2.452.3-ltsrestart: always# user: rootnetworks:- appenvironment:- TZ=Asia/Shanghai- JAVA_OPTS=-Duser.timezone=Asia/Shanghai- JENKINS_ARGS="--sessionTimeout=86400"volumes:- ./jenkins/sudoers.d:/etc/sudoers.d- ./jenkins/data:/var/jenkins_home- ./jenkins/war:/usr/share/jenkins- ./jenkins/caches:/caches- /var/run/docker.sock:/var/run/docker.sockports:- "8090:8080"
重啟容器:
cd /data/tmp
docker-compose up -d
docker-compose ps
這時(shí)候基本沒什么插件問題了,把棄用的插件卸載。
后面就是流水線和設(shè)置等的調(diào)整測試了。
5. 升級(jí) A 環(huán)境 jenkins
5.1 升級(jí) A 環(huán)境 jenkins master
環(huán)境 B 機(jī)器打包 jenkins 目錄
cd /data/tmp/
tar -cvf jenkins.tar jenkins/
然后下載 jenkins.tar
上傳到環(huán)境 A 機(jī)器 /tmp
下
因?yàn)榍懊姝h(huán)境 A 機(jī)器打包過濾了這些目錄,這些為任務(wù)、節(jié)點(diǎn)和工作目錄,所以新版本的 jenkins 目錄,把這幾個(gè)目錄拷貝過來先放好。--exclude='caches' --exclude='jobs' --exclude='logs' --exclude='nodes' --exclude='workspace'
mkdir -p /data/docker/jenkins/data
rsync -avz /home/jenkins/{caches,jobs,logs,nodes,workspace} /data/docker/jenkins/data/# 解壓 /tmp/jenkins.tar
cd /data/docker/
tar -xvf /tmp/jenkins.tarchown 1000.1000 -R /data/docker/jenkins
在 docker-compose 配置中添加上 jenkins 相關(guān)配置,注意這里使用的是 8090 端口,目的是不影響現(xiàn)有的 jenkins 8080 端口,等 8090 測試 ok 后,再關(guān)掉原來的 8080 端口,替換 8090 成 8080 端口完成升級(jí)。
/data/docker/docker-compose.yml
version: '3.1'
networks:app:services:jenkins:image: harbor.ygqygq2.com/proxy/jenkins/jenkins:2.452.3-ltsrestart: always# user: rootnetworks:- appenvironment:- TZ=Asia/Shanghai- JAVA_OPTS=-Duser.timezone=Asia/Shanghai- JENKINS_ARGS="--sessionTimeout=86400"volumes:- ./jenkins/sudoers.d:/etc/sudoers.d- ./jenkins/data:/var/jenkins_home- ./jenkins/war:/usr/share/jenkins- ./jenkins/caches:/caches- /var/run/docker.sock:/var/run/docker.sockports:- "8090:8080"
鏡像傳到環(huán)境 A 機(jī)器可以通過導(dǎo)出導(dǎo)入方式,或者傳到內(nèi)網(wǎng)鏡像倉庫,從內(nèi)網(wǎng)鏡像倉庫拉,目的是保證環(huán)境 A 機(jī)器上有這個(gè)最新的 jenkins 鏡像。
啟動(dòng)容器:
cd /data/tmp
docker-compose up -d
docker-compose ps
報(bào)錯(cuò)
原因是 docker 版本較舊,升級(jí) docker 版本,或者增加參數(shù):
security_opt:- seccomp:unconfined
現(xiàn)在應(yīng)該可以啟動(dòng)了。
5.2 升級(jí) A 環(huán)境 jenkins node
登錄 jenkins 后,可以看到 Node 已經(jīng)連不上。
先更新 node 的 jdk,更新為 openjdk17,下載鏈接
環(huán)境變量
JAVA_HOME=/opt/java/jdk
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/tools.jar
export PATH JAVA_HOME CLASSPATH
jdk 放好
cd /tmp
wget https://builds.openlogic.com/downloadJDK/openlogic-openjdk/17.0.11+9/openlogic-openjdk-17.0.11+9-linux-x64.tar.gz
tar -zxvf openlogic-openjdk-17.0.11+9-linux-x64.tar.gz
mv /tmp/openlogic-openjdk-17.0.11+9-linux-x64 /opt/java/openjdk-17.0.11
ln -s /opt/java/openjdk-17.0.11 /opt/java/jdk
然后節(jié)點(diǎn)設(shè)置指定這個(gè) jdk 就可以啟動(dòng)了。
因?yàn)槲覀?jenkins master 是使用 docker 方式啟動(dòng)的,流水線中不少步驟還是使用原來的宿主機(jī)。我們添加一個(gè) agent,宿主機(jī)作為 master agent,而真正的 master 則不添加標(biāo)簽,以此作為過度階段。
比如
- 通過在 Jenkins 的管理界面中,進(jìn)入“系統(tǒng)配置”或“全局安全配置”;
- 確保已經(jīng)啟用了代理的安全配置,比如“TCP 端口用于 JNLP 代理”選項(xiàng)不是設(shè)置為“禁用”;
- 使用固定端口 50000,因?yàn)?docker-compose 也得暴露出來;
- 這個(gè)
local-host
節(jié)點(diǎn)的標(biāo)簽設(shè)置為 master; - Built-In Node 節(jié)點(diǎn)的標(biāo)簽設(shè)置為空;
在使用 ssh 的地方,還有個(gè)安全設(shè)置要注意,比如使用 ssh 方式檢出代碼,如果不設(shè)置成 “No verification” 可能會(huì)導(dǎo)致無法檢出代碼。
6. 小結(jié)
Jenkins 升級(jí)涉及到的東西較多,用的插件、功能越多,流水線依賴越多,升級(jí)難度越大。
Jenkins 方案方式的變化也會(huì)引起流水線使用的變化,比如很多原來直接使用 master 運(yùn)行的部分,隨著 master 的容器化,里面很多命令和工具都沒了,這部分要權(quán)衡好,當(dāng)然像我上面一樣將宿主機(jī)作為 master 標(biāo)簽也是一個(gè)辦法。
Jenkins 升級(jí)后還需要一段時(shí)間的磨合,你可能發(fā)現(xiàn)某個(gè)功能的寫法的變化,某個(gè)功能因?yàn)榘踩蛐枰黾宇~外設(shè)置或者按安全要求修改。
當(dāng)然,容器化隔離提供了更安全的環(huán)境,各部分使用不同的鏡像做到各司其職是更好的實(shí)踐。