通过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)点击“立即构建”,该任务就会执行一次。

 

posted @ 2020-11-30 23:56  粽先生  阅读(832)  评论(0编辑  收藏  举报