jenkens+docker自动化构建并推送至阿里云仓库
- 写在前面
- 环境介绍
- docker安装,gitlab安装,jenkins安装
- docker配置
- jenkins配置
- jenkins配置加速
- jenkins安装插件
- 配置gitlab_webhook钩子
- 钉钉报警配置
- 配置docker远程连接
- docker-build-step插件配置
- 配置上传镜像
- 整体测试
写在前面
- 本想部署一套jenkins自动化构建系统来解决频繁需要手动构建的问题,奈何百度了一大堆不是广告就是心灵鸡汤,jenkisn插件的文档更是少的可怕,无奈只能自己折腾,目前一切正常,里面加入了一些个人理解,可能不对,希望大家多多指正。
环境介绍
TYPE | VERSION |
Github版本 |
|
docker版本 |
|
docker_hub |
|
jenkins版本 |
|
docker安装,gitlab安装,jenkins安装
自己百度,很多教程,重复也没意义,强调一下我遇到的问题
- 三个如果部署在一台服务器服务器配置一定要高,不然卡到怀疑狗生…
- gitlab一定要配置定时备份,数据无价
- docker一定要配置加速!jenkins也是!伟大的GFW…
- jenkins能本地安装就别偷懒用docker,目测可能会有丢配置问题,就算挂载volume也会,估摸着没全挂载上,玄学,加个注释就好。。。。 ==
//
// _oo0oo_
// o8888888o
// 88" . "88
// (| -_- |)
// 0\ = /0
// ___/`---'\___
// .' \\| |// '.
// / \\||| : |||// \
// / _||||| -:- |||||- \
// | | \\\ - /// | |
// | \_| ''\---/'' |_/ |
// \ .-\__ '-' ___/-. /
// ___'. .' /--.--\ `. .'___
// ."" '< `.___\_<|>_/___.' >' "".
// | | : `- \`.;`\ _ /`;.`/ - ` : | |
// \ \ `_. \_ __\ /__ _/ .-` / /
// =====`-.____`.___ \_____/___.-`___.-'=====
// `=---='
//
//
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// 佛祖保佑 永无BUG
docker配置
- vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H tcp://192.168.1.100:2375 -H unix:///var/run/docker.sock
找到这句话改为这样,个人理解应该是加一个远程调用接口方便jenkins远程调用,一定记得配置防火墙开放2375 tcp端口,不然jenkins联动不了
- 配置jenkins获取docker命令执行权限
这里的主要目的是让jenkins能够执行docker build,pull,push等命令,否则会报错。网上吧啦了一大堆,全是什么加入root用户组什么的,测试全不靠谱,正确方法应该是加入docker用户组
sudo usermod -aG docker jenkins
测试成功方法很简单,切换到jenkins用户执行一下docker命令就可以了
docker配置搞定
jenkins配置
jenkins配置加速
耐心党可以跳过这一节等他个天荒地老。。。反正真的很慢,一度觉得web页面是不是张图片。。。
sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' /var/lib/jenkins/updates/default.json
sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' /var/lib/jenkins/updates/default.json
- 强调一下我jenkins家目录是/var/lib/jenkins,不在这儿的请更换合适的位置,请不要无脑复制粘贴
- 这两句话的意思是替换jenkins官方下载地址到清华源(感谢清华的大佬们),并将网络连通监测由ping google换成ping baidu,执行完记得重启
systemctl restart jenkins
jenkins安装插件
不得不说,英语不好真的很吃亏。。。
- 我安装了这四个插件,docker安装的插件包括联动和构建模块,具体功能自己研究
- gitlab的话我安装了这几个模块,主要配置自动拉取需要webhook,不安装无法自动获取
- 钉钉插件就不用说了,报警提示必备,短信界的爱德华剪刀手,免费好用。。。
- 咋办,不想写了,这几句话写了一早上,比撸代码还累…
- Go on…多图警告
配置gitlab_webhook钩子
创建一个项目,然后选择右边的config,建议分项目单独配置,全局配置偷懒适当使用
- 记录下来这两个参数,分别是gitlab_webhook的地址和密匙
转到gitlab配置 - 把前面那两个参数填进来,下面框根据需求勾选
- 记得测试推送事件查看是否成功
- 钉钉推送提醒
- 钉钉添加gitlab机器人
- gitlab添加钉钉机器人API
钉钉报警配置
- 钉钉配置API机器人
- 记住webhook地址并选择安全设置为加签模式
- 在这里填写钉钉webhook和加签的密匙串
配置docker远程连接
- 这儿的docker_url对应上方的docker安装时配置的远程调用接口,记得写法一定对应,不能一边127.
0.0.1:2375一边192.168.1.100:2375,会出现test不通的问题。还有就是玄学了,打死测不通最后无奈重装docker插件才通,如果大家也遇到这个问题不妨试试,也算是有缘分。。。
docker-build-step插件配置
- 这里插一句话,jenkins有两种配置,一种是全局配置,全局都生效,在首页进入;一种是项目配置,得先有项目才能配置,上面的是项目配置
- gitlab拉取代码设置,分别填写gitlab地址和密匙
- 这里Scope推荐选择Globe全局配置,一次配置多个项目可用,gitlab密匙都可以用
- 打马赛克的都是无关紧要的东西,这是整个文章的核心
- 先说说docker-build-step功能,从上往下依次是
- 提交容器更改
- 启动并在容器中执行命令
- 创建容器(模板化dockerfile)看起来是这样,有点像docker-swarm的格式
- 在容器中执行命令
- 构建镜像(通过Dockerfile)
- 终止容器
- 拉取容器
- 推送容器
- 懒的写了,下面的英文单词很简单,自己翻译。。。
- 这里说说构建容器通过Dockerfile
- $WORKSPACE 指的是家目录下的WORKSPACE文件夹(/var/lib/jenkins/workspace/项目名称)
- tag 打标签,熟悉docker_hub的都知道,镜像需要改名为仓库地址+命名空间+项目名称格式才可以成功上传
- $BUILD_NUMBER 变量,每次提交自动加1,姑且当版本号用,不是很正规的话它也够用
- 找不到官方文档了,还有很多变量可以用,大家可以去找找
- Dockerfile的话直接和代码一起提交,所有它就在根目录,大家也可以自己设置位置,附一张我的代码目录结构图和Dockerfile文件
- 分别是git隐藏目录,前端代码(已编译),Docekrfile,nginx两个配置文件和supervisord配置文件
- Dockerfile
FROM ubuntu:16.04
MAINTAINER JohnsonCydia
RUN mkdir -p /SRP/Html/Html_code && \
mkdir -p /SRP/Html/Html_logs && \
mkdir -p /SRP/Html/Html_conf && \
rm -rf /etc/apt/sources.list && \
echo "deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security universe" >> /etc/apt/sources.list && \
echo "deb http://mirrors.aliyun.com/ubuntu/ xenial main" >> /etc/apt/sources.list && \
echo "deb-src http://mirrors.aliyun.com/ubuntu/ xenial main" >> /etc/apt/sources.list && \
echo "deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main" >> /etc/apt/sources.list && \
echo "deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main" >> /etc/apt/sources.list && \
echo "deb http://mirrors.aliyun.com/ubuntu/ xenial universe" >> /etc/apt/sources.list && \
echo "deb-src http://mirrors.aliyun.com/ubuntu/ xenial universe" >> /etc/apt/sources.list && \
echo "deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe" >> /etc/apt/sources.list && \
echo "deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates universe" >> /etc/apt/sources.list && \
echo "deb http://mirrors.aliyun.com/ubuntu/ xenial-security main" >> /etc/apt/sources.list && \
echo "deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main" >> /etc/apt/sources.list && \
echo "deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe" >> /etc/apt/sources.list && \
apt update && \
apt -y install nginx && \
apt -y install supervisor && \
rm -rf /etc/nginx/nginx.conf && \
rm -rf /etc/nginx/sites-available && \
rm -rf /etc/supervisor/supervisord.conf
COPY ./nginx.conf /etc/nginx/
COPY ./supervisord.conf /etc/supervisor/
COPY ./html.conf /SRP/Html/Html_conf/
COPY ./Html_code /SRP/Html/Html_code/
EXPOSE 80 443
CMD ["supervisord","-c","/etc/supervisor/supervisord.conf"]
- 其实没多少,配置了个阿里云加速,话说有谁知道Dockerfile里多行导入的方式,EOF实测用不了。。。
配置上传镜像
- 这儿填写那个docker login后面那个账号和密码,不是阿里云主账号密码
整体测试
push
Dev
github
DingDing_API
jenkins
DingDing_API
docker-build-step
DingDing_API
docker-push
DingDing_API
Aliyun
然后上面一长串表。。。说人话就是