前言
公司舊的服務器快到期了,需要將部署在其上的jenkins整體遷移到另一臺服務器,兩臺都是aws ec2服務器。
文章主要提供給大家一種遷移思路,并不一定是最優解,僅供參考,大家根據實際情況自行選用和修改,舉一反三。
部署文件
我的jenkins是采用docker compose方式部署的,docker-compose.yaml內容如下
networks:
jenkins:
name: jenkins
driver: bridgeservices:
jenkins:
image: jenkins/jenkins:2.504.3
user: root
container_name: jenkins
privileged: true
restart: always
networks:
- jenkins
ports:
- "8080:8080"
- "50000:50000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /usr/bin/docker:/usr/bin/docker
- /home/ec2-user/jenkins_compose/jenkins_configuration:/var/jenkins_home
environment:
- PATH=/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
- LANG=C.UTF-8
- JENKINS_HOME=/var/jenkins_home
- JENKINS_SLAVE_AGENT_PORT=50000
- REF=/usr/share/jenkins/ref
- JENKINS_UC=https://updates.jenkins.io
- JENKINS_UC_EXPERIMENTAL=https://updates.jenkins.io/experimental
- JENKINS_INCREMENTALS_REPO_MIRROR=https://repo.jenkins-ci.org/incrementals
- COPY_REFERENCE_FILE_LOG=/var/jenkins_home/copy_reference_file.log
- JAVA_HOME=/opt/java/openjdk
command: ["/usr/bin/tini", "--", "/usr/local/bin/jenkins.sh"]
遷移思想
- 停止jenkin容器,以保證數據無更新
- 將容器掛載的卷打包成tar包,傳到oss,比如aws s3或者其他的云服務,根據自己采用的云服務廠商來選擇
- 在另一臺服務器上拉取tar包,解壓縮后
- 使用docker compose啟動新容器
具體命令
具體細節,比如文件目錄,需更具自己實際情況做修改
# 在舊的服務器上# 在舊服務器上停止 GitLab 容器(防止數據變更)
docker-compose down# 打包Jenkins數據目錄?(保留權限和軟鏈接)
tar -czvf jenkins_backup.tar.gz -C /home/ec2-user/jenkins_compose/jenkins_configuration .# 上傳到S3?(需提前配置AWS CLI權限)
aws s3 cp jenkins_backup.tar.gz s3://your-bucket-name/jenkins_backup.tar.gz#在新的服務器上#從S3下載備份
aws s3 cp s3://your-bucket-name/jenkins_backup.tar.gz .# 為了方便,目錄結構可以和之前一樣
mkdir -p /home/ec2-user/jenkins_compose/jenkins_configuration# 解壓
tar -xzvf jenkins_backup.tar.gz -C /home/ec2-user/jenkins_compose/jenkins_configuration# 啟動容器
docker compose up -d
安裝完成之后的操作
更改jenkins url
安裝好之后,通過瀏覽器進入新jenkins web ui,更改jenkins url為新的服務器地址
?
刪除workspace下面的倉庫
?因為在新的服務器上構建老倉庫,可能會報git拉取問題,如圖
進入容器的/var/jenkins_home/workspace目錄,因為我的容器卷掛載的是?/home/ec2-user/jenkins_compose/jenkins_configuration:var/jenkins_home/workspace,所以我直接在宿主機上進入對應目錄,刪除下面的所有倉庫(無需擔心,因為數據是存在git倉庫的,如gitlab或者github什么的,所以刪去之后,再構建,jenkins會重新去遠程倉庫拉取新代碼)
在workspace目錄下執行下面的刪除操作!!!?
在workspace目錄下執行下面的刪除操作 !!!
在workspace目錄下執行下面的刪除操作!!!?
# 刪除當前目錄下所有內容(含隱藏文件/目錄)
sudo find . -mindepth 1 -delete 2>/dev/null
再次執行構建操作,構建成功