本地Docker Jenkins构建dotnet core web应用到Linux服务器 Docker上
1、准备工作
环境
- 本地:
windows
、docker
- 代码仓库:
git
- 服务器:
linux
、docker
前提准备
-
创建个有
dockerfile
文件的dotnet core 3 web
项目
新建一个dotnet 3.0的web项目,在项目文件夹添加dockerfile文件,内容如下:from mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim as base workdir /app expose 80 copy . . entrypoint ["dotnet", "webapplication.dll"]
- 准备git仓库,将项目的代码上传上去
-
构建有
dotnet core 3.0 环境
的jenkins
from jenkins/jenkins:lts # 切换root用户安装东西 user root # show distro information! run uname -a && cat /etc/*release run apt-get update run apt-get install -y curl libunwind8 gettext apt-transport-https run curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg run mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg run sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-debian-stretch-prod stretch main" > /etc/apt/sources.list.d/dotnetdev.list' run apt-get update run apt-get install -y dotnet-sdk-3.1 # 切换回来jenkins用户 user jenkins
因为jenkins里面是没有dotnetcore环境的,所以需要本地创建个支持dotnetcore环境的。
找个地方新建文件夹,创建dockerfile文件,内容如上。
-
build镜像并运行容器
docker build . -t jenkins_dotnet
这里等待时间会比较长~
# 运行刚刚构建好的容器 docker run -d --name jenkins -p 8080:8080 jenkins_dotnet
-
打开jenkins,安装推荐插件
打开 ,可以看到docker exec -it jenkins bash dotnet --version cat /var/jenkins_home/secrets/initialadminpassword
把密码复制出来登录,点击
左边按钮
安装推荐插件这里时间也会比较长,如果有部分安装失败了,等剩余的安装完后点击重试即可,如果服务器上还没有docker,现在可以去装下,装了的也可以连上服务器,去执行
docker pull mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim
拉取下dotnet core 3.1的镜像,等会创建镜像的时候就会快一点啦插件安装完后,会有一些创建管理员和地址配置,搞一下吧。
如果有插件安装失败,点过重试安装插件的,现在需要
docker restart jenkins
重启下应用,然后重新打开使用创建的管理员登录。
2、搞好了,开始干活
哦,还有些需要安装的插件 =.=||
需要安装的插件:
- scp publisher
- publish over ssh
- environment injector
进入 系统管理>插件管理->可选插件->输入插件名称->勾选需要插件->点击安装
安装完后,设置下这些插件,进入系统管理->系统配置,
scp publisher
设置
ctrl + f 搜下scp
找到scp repository hosts
-scp sites
设置位置,点新增
hostname: 服务器ip地址
port:端口,默认22、
root repository path:文件存放目录
user name:登录用户名
password/passphrase:密码publish over ssh
设置
ctrl + f 搜下scp
找到scp repository hosts
-ssh server
设置位置,点新增
再点高级
,勾选上use password authentication, or use a different key
name:名称
hostname:服务器ip地址
username:登录用户名
remote directory:远程目录
passphrase / password:密码
port:连接端口(默认22)
配置完后别忘记点保存。
创建构建任务第一种:*风格的软件项目
点击新建任务
, 选择构建一个*风格的软件项目
源码管理设置
选择git,在repository url
填入git仓库地址触发构建器
可以配置一些定时构建等,我这里只是测试所以没有选择触发器。- 构建环境
- 勾选
delete workspace before build starts
- 勾选inject environment variables to the build process,存放构建是需要用到的环境变量
- 勾选
-
构建- 添加执行shell步骤
增加构建步骤-执行shell,脚本如下:#切换目录 cd ./webapplication #还原nuget包 dotnet restore #编译 dotnet build #删除之前发布文件 cd ./bin rm -rf web-publish rm -f web-publish.tar cd .. #发布 dotnet publish -o ./bin/web-publish #删除配置文件 cd ./bin/web-publish cp ../../dockerfile . rm -rf config cd .. #压缩 tar -cvf web-publish.tar web-publish
- 构建后步骤
上传文件到服务器
增加构建后操作步骤
-选择publish artifacts to scp repository
,填入需要上传的压缩文件
这里文件目录的基础目录是workspace,如果不知道具体的地址,可以先不创建构建后步骤保存下,然后点击立即构建,等待成功后,点击工作空间看下文件路径是怎样的,比如我的是这样的:
得到压缩文件目录是webapplication/bin/web-publish.tar
添加 服务器上要执行的shll命令 步骤
增加构建后操作步骤
- 选择send build artifacts over ssh
这里要新增两个transfers set,在第一个
transfers
的exec command
输入创建镜像脚本:# 工作目录 work_dir="/root/publish/webapplication"; cd ${work_dir} # 删除原有发布文件夹 rm -rf web-publish; # 解压 tar -xvf web-publish.tar; #删除文件压缩包 rm -f web-publish.tar; #切换生成目录 cd web-publish/ #备份镜像 #停止容器 docker stop ${docker_container_name}; #删除容器 docker rm ${docker_container_name}; #删除镜像 docker rmi $(docker images | grep ${docker_image_name}); #创建镜像 docker build -t ${docker_image_name} ./;
在第二个
transfers
的exec command
,输入运行容器命令:# 运行容器 docker run -d -p 8001:80 --name ${docker_container_name} ${docker_image_name}
到这里所有的设置都已经搞好啦,
别忘记点击保存
,点击立即构建
测试一下吧~
创建构建任务第二种:流水线[pipeline](未完成)
todo:评论有位哥推荐流水线 可视化会好一点,有空再去尝试下发出来~