在docker項目中單機建構jenkins使用gitlab的webhook對項目進行持續部署注意本次項目是php項目沒有build和test部分,至于test部分我們下一節進行,本次隻是進行一個送出部署的功能,本屆不會講到使用docker進行傳遞的方式
項目結構說明

其中data/jenkins 是存放狀态jenkins的目錄
CI-server.yml是jenkisn啟動結構
version: "3.0"
services:
jenkins:
image: jenkins:latest
environment:
DOCKER_URL: ''
volumes:
- "/etc/localtime:/etc/localtime:ro"
#備份資料
- "./data/jenkins:/var/jenkins_home"
- "./dockerfiles/jenkins/.ssh:/var/jenkins_home/.ssh"
ports:
- "8999:8080"
# - "50000:50000"
docker-compose 編排的項目結構
docker-production.yml和docker-compose.yml的差異隻是關閉了安全端口,使用了一些線上的配置檔案而已
version: '3.2'
services:
nginx:
image: nginx:1.13.3
ports:
- "80:80"
links:
- "php-fpm:php-fpm"
volumes:
#網站目錄
- ./app:/var/www/html
- ./dockerfiles/nginx/conf.d:/etc/nginx/conf.d:ro
#日志檔案
- ./logs/nginx:/var/log/nginx
- /etc/localtime:/etc/localtime:ro
restart: always
command: nginx -g 'daemon off;'
##mysql db
mysql-db:
image: mysql:5.7
volumes:
- ./data/mysql:/var/lib/mysql:rw
- ./logs/mysql:/var/lib/mysql-logs:rw
- ./dockerfiles/mysql/conf.d:/etc/mysql/conf.d:ro
- /etc/localtime:/etc/localtime:ro
restart: always
environment:
MYSQL_ROOT_PASSWORD: zhaojun
MYSQL_DATABASE: package_v1
MYSQL_USER: zhaojun
MYSQL_PASSWORD: zhaojun
redis-db:
build: ./dockerfiles/redis
restart: always
volumes:
- ./data/redis:/data
- /etc/localtime:/etc/localtime:ro
php-fpm:
build: ./dockerfiles/php/
restart: always
environment:
TP_APP_DEBUG: 0
APP_DEBUG: 1
APP_DOCKER_DEV: 0
MYSQL_HOST: mysql-db
MYSQL_DATABASE: zushouyou_v1
MYSQL_USER: root
MYSQL_PASSWORD: zhaojun
MYSQL_PORT: 3306
volumes:
#網站目錄
- ./app:/var/www/html:rw
#配置檔案
- ./dockerfiles/php/php.ini:/usr/local/etc/php/php.ini:ro
- ./dockerfiles/php/php-fpm.conf:/usr/local/etc/php-fpm.conf:ro
- /etc/localtime:/etc/localtime:ro
#挂載站點日志
- ./logs/php-fpm:/var/log/php-fpm:rw
depends_on:
- mysql-db
- redis-db
links:
- mysql-db:mysql-db
- redis-db:redis-db
command: php-fpm
##job
takser:
image: node:6.9
environment:
MYSQL_HOST: mysql-db
SERVER_HOST: server
volumes:
- ./app/node-task:/task
- /etc/localtime:/etc/localtime:ro
links:
- mysql-db:mysql-db
- redis-db:redis-db
- nginx:server
working_dir: /task
command: /bin/bash -c "npm install && node ./index.js"
##composer建構工具
composer:
image: composer:1.4.2
volumes:
#網站目錄
- ./app:/app:rw
working_dir: /app/webroot
command: composer install
##前端工具
bower:
image: digitallyseamless/nodejs-bower-grunt
volumes:
- ./app:/app:rw
working_dir: /app/webroot
command: bower install
Step1,單機伺服器部署jenkins和docker編排的項目
這裡我們把伺服器指令為:zushouyou
伺服器預先需要進行
- 1.優化
- 2.安裝 git docker
- 3.clone 項目下來
git clone project..
Step2,克隆完成項目以後啟動jenkins
docker-compose -f CI-server.yml up -d
如果發現jenkins容器挂了,檢視日志,添權重限,重新開機容器就行了
Step3,配置Jenkins
在CI-server.yml中我們映射了 8999->8080端口,是以我們隻要通路這個端口就可以通路到jenkins了,如果服務拒絕,請檢查伺服器商安全組,iptables規則,firewalld等防火牆。
然後我們就能通路歡迎界面了。
檢視初始密碼,這裡我們的容器id是 f8
docker exec -it f8 bash -c 'cat /var/jenkins_home/secrets/initialAdminPassword'
60e74c836b25402581cb0daae95b65a4
首次進入,需要先安裝插件,這裡我們選擇手工的去選擇一些插件就行了,因為我們如果隻是內建的話用不了多少插件
插件選擇我就不截圖說明了,build tools 和pipline裡面得插件可以先取消。
比需要的插件如下
在安裝完成之後配置使用者名和賬号,最後還需要安裝一些第三方的插件
系統管理>管理插件
1.ssh,這個插件便于到遠端ssh主機上執行指令
2.webhook,這裡我們是gitlab其他同理
在安裝完成以後,最好還是重新開機一下,避免出現問題
Step4,配置Job
系統設定先配置SSH Server和Git的SSH
先讓主控端能通過ssh進行pull
1.生成rsa
2.添加到git網站公鑰
3.如果能直接pull,說明OK了
4.配置jenkins的server
配置SSH主機
5.完事後回到首頁開始job吧
- 1.
- 2.
- 3.
- 4.執行建構
最後就隻配置一下通知了,
gitlab的webhook配置一下
$RUL/generic-webhook-trigger/invoke?token=fuck
這樣就完成了一次自動化部署的過程。請記住,這篇文章隻是讓我們了解了一些簡單的原理,其中包含build,test最後才是ci,如果我們前面的工作不去實作做,這樣并沒有什麼意義,隻是做了一個自動化的腳本。