Jenkins 使用 Docker 编译发布 .netcore

准备条件:

1,centos,jenkins,docker,docker-compose

ps:jenkins我并没有使用docker,因为某些神奇的问题导致我没办法使用docker命令,所有直接装在了宿主机上,docker使用的是

Docker version 17.05.0-ce,docker容器编排我用的是docker-compose,下面的启动容器命令全都是docker-compose命令

原理:

    这里其实利用的是docker的数据卷挂载功能,将宿主机上的源码目录挂在到.netcore 编译容器上,然后使用命令进入编译容器执行编译命令,

完成编译后,生成的项目文件会同步保存在宿主机上,这样就实现了直接在linux环境下编译.net项目,既然在linux能够直接编译了,那么发布就更简单了,发布请看我的另外一篇文章

开始操作:
1,jenkins创建任务,构建一个自由的风格的软件项目
2,配置git源,利用jenkins自动拉取最新代码进行编译

 
3,配置构建触发器,因为我的源码管理使用的是gogs,所有我的触发器使用的是gogs的webhook,这里可以使用jenkins的轮询功能,定时查找git源,发现有最新提交则开始编译,命令语法是CRON,不知道的可以自行百度,具体如下:

 
4,创建构建环境,命令如下:

这里的com_corebuild,其实是我已经启动好的微软的官方编译环境docker容器

docker exec -i com_corebuild /bin/bash -c "cd /workspace/YunCai.MarketManage/aspnet-core && dotnet publish -o ../../publish && exit"

cd aspnet-core/publish

docker rm -f yuncaiapi || true

docker rmi yuncaiapi || true

docker build -t yuncaiapi .

dockercs -f ~/yml/docker-compose.yml up -d yuncai

sleep 15s

dockercs -f ~/yml/docker-compose.yml logs yuncai

curl -I localhost:8084

 

第一行命令就是触发docker容器编译,第二行命令开始则是对编译好的文件执行发布,我用的是docker直接发布的方式

5,容器编排

下面我贴出启动编译容器和构建发布镜像和docker发布的命令和配置,如下:

启动com_corebuild:

corebuild:

    container_name: com_corebuild

    image: microsoft/aspnetcore-build

    restart: "always"

    volumes:

      - /srv/aspnetcore/build/app:/app(为了保证编译容器能一直挂在后台我事先在宿主机上随便生成了一个demo项目,在容器启动后,运行这个demo,这样编译容器就不会在编译完成后退出了,这里将默认项目的宿主机目录挂载到容器上,在下面使用命令启动容器时,启动demo)

      - /var/lib/jenkins/workspace:/workspace

    working_dir: "/app"

    command: "bash -c 'dotnet demo.dll'"

    networks:

    - db_network

 

构建项目发布镜像的Dockfile:

FROM microsoft/aspnetcore

WORKDIR /app

COPY . .

ENTRYPOINT ["dotnet", "YunCai.MarketManage.Web.Host.dll"]

 

使用项目镜像启动项目容器:

yuncai:

    container_name: yuncaiapi

    image: yuncaiapi

    ports:

    - "8084:80"

    external_links:

    - com_mariadb:mariadb

    - redis:redis

    - kafka:kafka

    volumes:

    - /etc/localtime:/etc/localtime

    - /srv/aspnetcore/yuncai/wwwroot:/app/wwwroot

    - /srv/aspnetcore/yuncai/logs:/app/Logs

    restart: "always"

    networks:

    - db_network

 

转载于:https://www.cnblogs.com/rokeyyan/p/9014976.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值