通過jenkins實現持續發布


===============================================

 2020/12/22_第2次修改                       ccb_warlock

 

更新說明:

2020/12/22:

1.重新整理步驟,更正了描述不正確的內容;

===============================================

部署完jenkins(https://www.cnblogs.com/straycats/p/14033405.html)后,接着就是使用jenkins實現持續發布.net項目,下面架構圖是基於《京東基礎架構建設之路》的解決方案做了些調整。

 

1.提交源碼

2.觸發Jenkins任務

3.遠程執行shell腳本,操作構建服務器

4.構建服務器拉取源碼構建打包

5.將包和Dockerfile發給鏡像構建節點

6.在鏡像構建節點生成鏡像

7.將鏡像上傳至倉庫

8.部署容器

 

這里合並了構建功能到開發服務器,故接着就是配置開發服務器、jenkins服務器即可。


一、選擇鏡像倉庫

可以選擇一些免費的鏡像倉庫(dockerhub、阿里雲等等)用於存放構建的鏡像。如果需要搭私有倉庫可以選擇搭建harbor(https://www.cnblogs.com/straycats/p/8850693.html

這里選擇了阿里雲(registry.cn-beijing.aliyuncs.com)作為鏡像倉庫

 


二、部署builder服務器

2.1 安裝docker

centos7上部署參考 https://www.cnblogs.com/straycats/p/10680502.html

 

2.2 安裝git

sudo yum install -y git

 

2.3 安裝.net core

centos7上部署參考https://docs.microsoft.com/zh-cn/dotnet/core/install/linux-centos

 

2.4 創建rsa證書

因為我拉取git常用ssh,故需要在builder服務器上創建rsa證書,通過公鑰拉源碼。

sudo ssh-keygen -t rsa

1. 生成的過程中提示輸入密鑰對保存位置,直接回車,接受默認值就行了。

2. 因為之前已經有/root/.ssh/id_rsa 文件存在,因此提示你是否覆蓋,輸入y表示覆蓋 。

3. 接着會提示輸入一個密碼,直接回車,讓它空着。當然,也可以輸入一個密碼。

4. 接着輸入確認密碼,輸入完之后,回車密鑰對就生成完了。

 

接着將公鑰(/root/.ssh/id_rsa.pub)的內容貼到git賬號中。

 

2.5 拉取源碼

這里將dev分支的源碼拷貝到目錄/opt/src下。

sudo mkdir -p /opt/src
cd /opt/src
sudo git clone -b dev <git項目地址>

 

2.4 創建構建目錄

sudo mkdir -p /opt/publish/abc/published

 

2.5 編寫遠程執行用的shell腳本

sudo mkdir -p /opt/build/abc
sudo vi /opt/build/abc/build.sh

# 將下面的內容保存到build.sh中。

#!/bin/bash
src_dir="/opt/src/abc"
publish_dir="/opt/publish/abc/published"

echo "==> Begin build project <=========="
cd $src_dir
sudo git checkout dev
sudo git pull

#commit_id_old=`git rev-parse HEAD`
#sudo git pull
#commit_id_current=`git rev-parse HEAD`
#if [ $commit_id_old = $commit_id_current ];then
#    echo "==> Branch dev has not changed, exit <=========="
#    exit 1
#fi

sudo rm -rf $publish_dir
sudo mkdir -p $publish_dir
sudo dotnet publish -o $publish_dir
echo "==> End build project <=========="

echo "==> Begin build image <=========="
# Dockerfile文件放在源碼的Server目錄下
sudo yes| cp -rf $src_dir"/Server/Dockerfile" /opt/publish/abc
cd /opt/publish/abc
sudo docker build --rm -t registry.cn-beijing.aliyuncs.com/abc/abc:latest .
sudo docker push registry.cn-beijing.aliyuncs.com/abc/abc:latest
echo "==> End build image <=========="

echo "==> Begin deploy stack <=========="
# 這里通過docker swarm來部署
cd /opt/docker/compose/abc
sudo docker stack rm abc-stack
sudo docker stack deploy -c abc-stack.yml abc-stack
echo "==> End deploy stack <=========="

 


三、部署jenkins服務器

3.1 部署jenkins服務器

 參考:https://www.cnblogs.com/straycats/p/14033405.html

 

3.2 安裝插件Publish Over SSH

 

3.3 在jenkins服務器上生成rsa證書

sudo ssh-keygen -t rsa
cd /root/.ssh
sudo cp id_rsa.pub id_rsa.pub.jenkins

這樣,在/root/.ssh下生成id_rsa(私鑰) 和 id_rsa.pub (公鑰)兩個文件。

 

3.4 在builder服務器設置密鑰配對

1)在builder服務器的/root/.ssh下創建authorized_keys文件

sudo mkdir -p /root/.ssh
sudo touch /root/.ssh/authorized_keys

 

2)將jenkins服務器的id_rsa.pub.jenkins拷貝到builder服務器的/root目錄下

 

3)通過 cat 命令 把id_rsa.pub追加到 authorized_keys 文件中

cd /root/.ssh
sudo cat id_rsa.pub.jenkins >> /root/.ssh/authorized_keys

 

3.5 添加SSH服務器

1)"系統管理" - "系統配置" - “Publish over SSH”一欄,將jenkins服務器的SSH私鑰(/root/.ssh/id_rsa)填到Key中。

 

2)點擊左下角的“新增”,添加SSH Server(可以點擊“Test Configuration”驗證是否連通),填寫后點擊“保存”。

 

3.6 創建jenkins任務

1)點擊“新建任務”

 

2)構建環境,勾選“Add timestamps to the Console Output”

 

3)“構建”  -  選擇“Send files or execute commands over SSH”

 

4)點開所選服務器旁邊的“高級”,勾選“Verbose output in console”

 

5)在“SSH Server”的“Exec command”中填寫遠程執行的命令,點擊“保存”。

 

6)點開構建步驟(Send files or execute commands over SSH)的“高級”,勾選“Fail the build if an error occurs”,點擊“保存”

 

3.7 執行任務

1)點擊任務進入任務界面。

 

 

2)點擊“立即構建”,該任務就會執行一次。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM