目的:搭建一个在linux服务器上持续部署asp.net core项目的例子,asp.net core项目和Jenkins都是容器化部署。
环境:ubuntu 18.04 (centos也可以)
Docker version 18.09.6
基础Jenkins镜像 jenkins/jenkins
持续集成是什么?http://www.ruanyifeng.com/blog/2015/09/continuous-integration.html
Jenkins介绍https://blog.csdn.net/miss1181248983/article/details/82840006
1.在ubuntu服务器上,安装docker
安装方式参考文档:https://docs.docker.com/install/linux/docker-ce/ubuntu/
加入docker用户组:https://docs.docker.com/install/linux/linux-postinstall/
2.构建Jenkins镜像,以jenkins/jenkins镜像为基础
FROM jenkins/jenkins:lts
# 可以根据需要安装工具
USER root
RUN apt-get update && apt-get install -y sudo && rm -rf /var/lib/apt/lists/*
RUN echo "jenkins ALL=NOPASSWD: ALL" >> /etc/sudoers
USER jenkins
如果不想自己构建镜像,可以直接用我构建好的,在docker hub上:forestgzh/jenkins (不保证长期有效。。)
3.在码云Gitee上托管asp.net core的项目代码(因为码云有免费私人仓库。。)
4.启动Jenkins
在服务器上启动forestgzh/jenkins镜像:
docker run --name my-jenkins -p 8080:8080 -p 50000:50000 \
-v ~/jenkins:/var/jenkins_home \
-v /usr/bin/docker:/bin/docker \
-v /var/run/docker.sock:/var/run/docker.sock \
-d forestgzh/jenkins
-v /var/run/docker.sock:/var/run/docker.sock 这条指令是为了Jenkins容器内能与宿主机的docker通信,这条非常关键。
5.配置Jenkins
Jenkins容器启动完成后,用 ‘docker logs 容器名’ 查看密码:一串数字,一眼就看到了,
然后在浏览器打开:http://ip:8080 ,ip是服务器的ip地址
进去后输入刚刚docker logs查看到的密码,进去后设置用户,一直下一步就可以了。
然后点击系统管理->插件管理->下载Gitee插件
然后,系统管理->系统设置,配置如下:
具体配置过程参考:https://gitee.com/help/articles/4193#article-header0
配置完后保存。
回到首页,新建一个任务:
然后配置任务:
然后配置Build Triggers
最后,最重要的是Build,下拉框选择执行shell:
#!/bin/bash
# 获取短版本号
GITHASH=`git rev-parse --short HEAD`
sudo docker stop testjenkins
sudo docker rm testjenkins
echo ---------------Building Docker Image...------------------
sudo docker build -t testjenkins:$GITHASH .
sudo docker tag testjenkins:$GITHASH testjenkins:latest
echo ---------------Launching Container...------------------
sudo docker run --name testjenkins -d -p 5000:80 testjenkins:latest
Jenkins就是根据前面的触发器触发这个脚本去构建镜像,持续部署。
这边设的是每两分钟,可以自行设置Gitee webhook 触发构建,Gitee webhook参考文档:https://gitee.com/help/articles/4193#article-header13
配置完后保存,查看任务,可以看到构建部署历史:
再看项目,每次提交后,能访问到最新的页面: