Jenkens+Docker+Git 持續整合

Donjan發表於2019-12-10

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 微服務練兵》系列教程

相關文章