Jenkens+Docker+Git 持续集成
Jenkens、Docker Hub、Github集成是非常简单的一条龙服务,但我们大部分时间使用的是国内Git仓库,并且源码为私有。这篇文章介绍的是通过Git仓库的Webhooks通知Jenkens执行构建并发布到阿里容器镜像服务,阿里容器镜像服务触发器通知我们的集群更新服务。
准备工作
开通容器镜像服务:https://cr.console.aliyun.com 并配置好独立的登录密码。
创建一个命名空间和镜像仓库,我们将使用storage的源码进程演示
得到我们的仓库地址和使用说明,我选的成都,所以仓库地址是registry.cn-chengdu.aliyuncs.com
编写Dockerfile
参见源码https://github.com/donjan-deng/la-storage/...
安装Jenkens
在管理节点执行:
docker run -d --restart always --name jenkins \
-u root -p 8080:8080 \
-v /home/data/jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v "$HOME":/home jenkinsci/blueocean
打开:http://192.168.137.200:8080,需要密码。进入docker
docker exec -it jenkins bash
cat /var/jenkins_home/secrets/initialAdminPassword
我的密码是635ab3fe80c7406bbc3b821d045f7122
下一步就是插件安装,选择推荐安装。接下来是漫长的等待。
接下来创建管理帐号或者使用admin继续,密码就是上面得到的。
添加一个全局凭据保存阿里云镜像仓库的账号密码
添加API Token
去掉跨站点请求安全设置
编写Jenkinsfile
参见源码https://github.com/donjan-deng/la-storage/...
添加流水线
打开Blue Ocean面板:http://192.168.137.200:8080/blue/organizat... 创建流水线。选择git,填入你的私有仓库地址,可以使用用户名密码方式登录,也可以使用证书。
创建完流水线会自动执行第一次构建。
部署服务
配置env文件
进入我们搭建集群时安装的Portainer面板,在Configs创建一个storage.env的config
APP_NAME=storage
APP_KEY=base64:5B8U2aa/7ftmij9oZP9kz6JzpLJQOGx5MtVyqf/rbXo=
APP_TIMEZONE=UTC
LOG_CHANNEL=elasticsearch
ELASTIC_HOST=es01:9200
LOG_SLACK_WEBHOOK_URL=
#我们的storage服务没有用到数据库,所以不用设置
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
FILESYSTEM_DRIVER=s3
AWS_KEY=BCIAIOSFODNN7EXAMPLE
AWS_SECRET=aKalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
AWS_REGION=us-east-1
AWS_URL=http://minio:9000
AWS_BUCKET=image
SERVICE_USER_CENTER=http://user_center:9504
登录阿里云镜像仓库
在Portainer面板添加我们的阿里云镜像仓库
创建服务
两种方法:
-
在管理节点执行命令
docker login registry.cn-chengdu.aliyuncs.com #先登录 docker service create \ --name storage \ --with-registry-auth \ --replicas 1 \ #这是同时运行的副本数,=如果设置为每个节点都运行换成--mode global --network my-net \ --config source=storage.env,target=/app/.env \ #前面我们创建的配置文件 registry.cn-chengdu.aliyuncs.com/donjan/storage:latest
-
在Portainer面板创建
同时运行的副本数,选择Global所有节点都运行
打开webhook
私有网络
配置文件如何变更config
比如我们.env配置要变,创建一个storage.v2.env,可以在Portainer面板删掉原来的,添加新的。然后Apply changes或者直接执行命令
docker service update \ --config-rm storage.env \ --config-add source=storage.v2.env,target=/app/.env \ storage
持续集成
-
在我们GIT仓库webhook设置master有push就发送POST请求给Jenkens。
http://admin:11c4d7faba574273c76a92def472979658@192.168.137.200:8080/job/la-storage/job/master/build
其中admin为账号:前面创建的token,la-storage为流水线名称,master为分支名。必须是POST请求。
-
在我们的Portainer面板找到刚才创建的Service,复制出webhook连接,我的是
http://192.168.137.200:9000/api/webhooks/a...
在阿里云镜像仓库创建一个触发器,URL就填写上面的,选择“Tag触发",然后勾选我们创建服务用的latest Tag
《PHP微服务练兵》系列索引: 博客:《PHP 微服务练兵》系列教程
本作品采用《CC 协议》,转载必须注明作者和本文链接
gitlab私有仓库外网可访问吗,可以的话,可以直接在阿里云容器镜像服务里授权,然后自动根据设置构建