我这边Docker、Jenkins、Gitlab 都已准备完毕,Jenkins和GItlab 都是用Docker起的
我们先进入Jenkins,插件什么的按他推荐的装就可以了,另外使用gitlab,还需要额外安装下面的插件
然后我们开始在Jenkins上创建项目
然后点保存,接下来操作GItlab,点到项目里面
点击添加webhook ,会提示:Urlis blocked: Requests to the local network are not allowed
Gitlab 10.6 版本以后为了安全,默认不允许向本地网络发送webhook请求,可以修改默认值,我们管理员登录Gitlab
此时重新添加webhook,测试发送请求401,这是Jenkins和GItlab没有建立可信关系,打开Jenkins,创建一个token
然后在Gitlab添加webhook时候,网址需要改一下格式:用户名:token@Jenkins生成的URL,
比如 admin:[email protected]:8088/project/Test
点击保存,测试,提示“Hook executed successfully but returned HTTP 403
这个需要进入Jenkins里面,系统设置取消勾选 Enable authentication for '/project' end-point
然后重新测试,报了个满屏的错误 Hook executed successfully but returned HTTP 500
webhook的地址里面的project要换成job(我看很多都是project,查了才知道高版本的Jenkins有这个问题),修改地址,重新测试,发现终于报200成功了,但是Jenkins那边并没有反应,我的天,这又是什么鬼
查了一通发现地址后面需要追加/build,也就是完整的地址是
admin:[email protected]:8001/job/Test/build
username:token@ip:port/job/projectName/build
改完之后再次测试,gitlab这边报201,Jenkins也构建成功了
后面我们继续去继续Jenkins里面配置项目
此处目的是将java项目打包,继续新增构建步骤-执行shell,shell内容需要根据实际情况稍微变更,
还有就是java项目需要先有Dockerfile.
cd test/
service_name="test"
service_prot=8080
tag=latest
#查看镜像id
IID=$(docker images | grep "$service_name" | awk '{print $3}')
echo "IID $IID"
if [ -n "$IID" ]
then
echo "exist $SERVER_NAME image,IID=$IID"
#删除镜像
docker rmi -f $service_name
echo "delete $SERVER_NAME image"
#构建
docker build -t $service_name .
echo "build $SERVER_NAME image"
else
echo "no exist $SERVER_NAME image,build docker"
#构建
docker build -t $service_name .
echo "build $SERVER_NAME image"
fi
#查看容器id
CID=$(docker ps | grep "$SERVER_NAME" | awk '{print $1}')
echo "CID $CID"
if [ -n "$CID" ]
then
echo "exist $SERVER_NAME container,CID=$CID"
#停止
docker stop $service_name
#删除容器
docker rm $service_name
else
echo "no exist $SERVER_NAME container"
fi
#启动
docker run -d --name $service_name -p $service_prot:$service_prot $service_name:$tag
然后点击保存,此时提交代码,Jenkins会重新构建,删除旧镜像(如果已存在),创建新镜像并运行,如果还有问题,那就看日志,具体情况具体分析