appveyor docker 镜像制作
- appveyor 是由 asp.net core 开发的 CI/CD 产品,也是之前少数支持 windows 环境的 CI/CD 产品之一。由于容器技术发展极快,利用容器的能力,可轻松快速拉取所需各种环境。从这一点上看,各产品之间,个人感觉差异并不大,主要还是看各家侧重点。今天要提的,其实是它内部的 nuget feed 功能,即将它作为 nuget 包源
为什么选择它
- 我们的目标是自托管一个私有 nuget 源,部署在服务器并且不是在内网,任何开发机通过公网 ip 可访问,并需要需要认证
- 此处介绍了几款产品
- Azure Artifacts 也可通过 Team Foundation Server 2017 以及更高版本获得。
- MyGet
- Inedo 的 ProGet
- NuGet 服务器,Inedo 的社区项目
- NuGet 服务器(开放源代码),与 Inedo 的 NuGet 服务器相似的开放源代码实现
- LiGet:在 docker 中 kestrel 上运行的 NuGet V2 服务器的开放源代码实现
- BaGet 构建与 ASP.NET Core 基础上的 NuGet V3 服务器的开源实现
- Sleet(开放源代码 NuGet V3 静态源生成器)
- JFrog 的 Artifactory。
- Sonatype 的 Nexus。
- JetBrains 的 TeamCity。
- 其中大部分不能自托管,需要买服务,一部分复杂难用,有的还不支持私有源访问认证
- 符合要求的基本都是 CI/CD 产品中的 nuget 功能,其中 appveyor 是发现的最简单易用的
安装
制作过程
制作 Dockerfile
FROM ubuntu:18.04 as download
WORKDIR /tmp
RUN apt update
RUN apt install wget -y
RUN wget https://www.appveyor.com/downloads/appveyor-server/7.0/linux/appveyor-server_7.0.2184_amd64.deb -O appveyor-server.deb
FROM mcr.microsoft.com/dotnet/core/runtime-deps:2.2.5-bionic
RUN apt update
RUN apt install libcap2-bin -y
COPY --from=download /tmp/appveyor-server.deb /tmp/
RUN dpkg -i /tmp/appveyor-server.deb
RUN cd /tmp && rm -f *
WORKDIR /opt/appveyor/server
EXPOSE 80 443
VOLUME [ "/etc/opt/appveyor/server" ]
VOLUME [ "/var/opt/appveyor/server" ]
ENTRYPOINT [ "./appveyor-server" ]
运行及使用
- 执行命令安装
docker run --restart always --name appveyor -d -p 80:80 -v appveyor_config:/etc/opt/appveyor/server -v appveyor_data:/var/opt/appveyor/server xxred/appveyor
,然后在浏览器访问,设置密码即可
- 进到主页面,选择
Account
栏目,左边选项卡选择Nuget
,稍等片刻即可看到账号级别的 NuGet feed 和相应 API key
- 使用下面的命令推送一个 nuget 包进行测试,将 nuget 包源地址添加到 Nuget Source,选择该包源搜索包,即可看到弹窗要求进行验证,输入刚刚设置的账号密码即可
总结
- Nuget 包私有源作为公司内部包管理之一,可有效管理多个 dll,减轻升级 dll 的成本
- 将更多功能独立成一个 dll,各系统按需引入,加快新系统搭建速度
- 逐步建立公司公共基础库,常用业务库等,nuget 包管理发至关重要的作用
打开App,阅读手记