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 协议》,转载必须注明作者和本文链接
讨论数量: 1

gitlab私有仓库外网可访问吗,可以的话,可以直接在阿里云容器镜像服务里授权,然后自动根据设置构建

4年前 评论
Donjan (楼主) 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!