在docker項目中單機構建jenkins使用gitlab的webhook對項目進行持續部署注意本次項目是php項目沒有build和test部分,至於test部分咱們下一節進行,本次只是進行一個提交部署的功能,本屆不會講到使用docker進行交付的方式php
其中data/jenkins 是存放狀態jenkins的目錄html
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-production.yml和docker-compose.yml的差別只是關閉了安全端口,使用了一些線上的配置文件而已node
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
這裏咱們把服務器命令爲:zushouyoumysql
服務器預先須要進行nginx
git clone project..
docker-compose -f CI-server.yml up -d
若是發現jenkins容器掛了,查看日誌,添加權限,重啓容器就好了git
在CI-server.yml中咱們映射了 8999->8080端口,因此咱們只要訪問這個端口就能夠訪問到jenkins了,若是服務拒絕,請檢查服務器商安全組,iptables規則,firewalld等防火牆。web
而後咱們就能訪問歡迎界面了。
redis
查看初始密碼,這裏咱們的容器id是 f8sql
docker exec -it f8 bash -c 'cat /var/jenkins_home/secrets/initialAdminPassword' 60e74c836b25402581cb0daae95b65a4
首次進入,須要先安裝插件,這裏咱們選擇手工的去選擇一些插件就好了,由於咱們若是隻是集成的話用不了多少插件
插件選擇我就不截圖說明了,build tools 和pipline裏面得插件能夠先取消。
比須要的插件以下
在安裝完成以後配置用戶名和帳號,最後還須要安裝一些第三方的插件
系統管理>管理插件
1.ssh,這個插件便於到遠程ssh主機上執行命令
2.webhook,這裏咱們是gitlab其餘同理
在安裝完成之後,最好仍是重啓一下,避免出現問題
先讓宿主機能經過ssh進行pull
1.生成rsa
2.添加到git網站公鑰
3.若是能直接pull,說明OK了
4.配置jenkins的server
配置SSH主機
5.完過後回到主頁開始job吧
最後就只配置一下通知了,
gitlab的webhook配置一下
$RUL/generic-webhook-trigger/invoke?token=fuck
這樣就完成了一次自動化部署的過程。請記住,這篇文章只是讓咱們瞭解了一些簡單的原理,其中包含build,test最後纔是ci,若是咱們前面的工做不去實現作,這樣並無什麼意義,只是作了一個自動化的腳本。