容器化简易cicd(3):jenkins+gitlab 自动发布
共三页:
先实现手动构建+发布
gitlab凭据
在jenkins添加一下gitlab的账户凭据:
测试
还是新建一个freestyle构建,标签选择器maven
:
代码源选gitlab
,地址抄下项目地址,凭据选刚才增加的。
构建方式还是shell构建,以下为例子:
DOCKER_HARBOR=hub.xxx.com #harbor地址
DOCKER_HUB=$DOCKER_HARBOR/xxx #仓库地址
DOCKER_HUB_USER=jenkins #harbor上创建一个管理员用户
DOCKER_HUB_PASSWORD=123456
MODULE_LIST="zuul admin open-api" #枚举一下需要运行的子项目jar包
K8S_NS=xxx #项目跑在xxx空间
BUILD=$BUILD_NUMBER # BUILD_NUMBER是构建号,jenkins自带的
#编译 打镜像
/usr/local/maven/bin/mvn compile package -DskipTests -Dmaven.compile.fork=true -Pprod #fork开启多线程编译 -P接配置文件的环境
docker login --username=$DOCKER_HUB_USER $DOCKER_HARBOR --password $DOCKER_HUB_PASSWORD
for module in $MODULE_LIST;do
cd $module
docker build -f Dockerfile -t $DOCKER_HUB/$module:$BUILD . #循环打镜像,注意在项目的根目录放好Dockerfile
docker push $DOCKER_HUB/$module:$BUILD
if [ $? -ne 0 ];then
echo "$module push error"
exit 1
fi
cd ../
done
echo "image push sucess:"
for module in $MODULE_LIST;do
echo "$DOCKER_HUB/$module:$BUILD"
done
# 没有用module来轮询,每个项目的子项目启动依赖可能不一样
kubectl set image deployments eureka-01 *=$DOCKER_HUB/admin:$BUILD -n $K8S_NS
kubectl set image deployments eureka-02 *=$DOCKER_HUB/zuul:$BUILD -n $K8S_NS
kubectl set image deployments eureka-03 *=$DOCKER_HUB/open-api:$BUILD -n $K8S_NS
开始构建,发现启动了一个slave节点:
其实就是这个新pod:
构建完成后,pod会释放掉
自动构建+发布
还是看下刚才的构建,看下触发器部分:
增加了个远程触发,手动指定一个token
即可。
我们现在可以用http://xxx.jenkins.xxx/构建/build?token=xxx来实现get
触发构建。
没有成功,需要把匿名可读打开下:
打开gitlab
,找到需要构建的项目,填下刚才的触发url,其中Trigger
只用勾上push events
,ssl
关闭即可。
点test
,选push events
,发现报403错误。
打开gitlab
的安全配置,把跨域勾掉即可: