资讯专栏INFORMATION COLUMN

使用Jenkins进行持续部署(PHP代码)

fjcgreat / 2242人阅读

摘要:查看初始密码,这里我们的容器是首次进入,需要先安装插件,这里我们选择手工的去选择一些插件就行了,因为我们如果只是集成的话用不了多少插件插件选择我就不截图说明了,和里面得插件可以先取消。

在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,如果我们前面的工作不去实现做,这样并没有什么意义,只是做了一个自动化的脚本。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/25689.html

相关文章

  • fir.im weekly - 「 持续集成 」实践教程合集

    摘要:来这里看看的工程师如何进行持续集成与持续部署。主要介绍了豆瓣移动持续集成和测试相关实践,用工具化自动化社会化测试来解决遇到的问题,将打包发布环节自动化。这期的持续集成实践分享就到这里。 我们常看到许多团队和开发者分享他们的持续集成实践经验,本期 fir.im Weekly 收集了 iOS,Android,PHP ,NodeJS 等项目搭建持续集成的实践,以及一些国内外公司的内部持续集成...

    A Loity 评论0 收藏0
  • 联调环境快速部署——基于docker-compose的CI/CD实践

    摘要:三部署架构说明这个方案仅适用于小公司敏捷项目团队联调测试环境的部署,同时也可以作为学习入门的,并不适用于有一定规模的生产环境。另外,建议把测试域名泛解析到部署这台服务的机器。模块配置部署脚本业务模块的配置基本是通过部署脚本来操作的。 项目地址: https://github.com/xiongwilee...基本特性: 快捷部署多人nginx+php的开发测试环境,也可以扩展构建其...

    xiaokai 评论0 收藏0
  • 联调环境快速部署——基于docker-compose的CI/CD实践

    摘要:三部署架构说明这个方案仅适用于小公司敏捷项目团队联调测试环境的部署,同时也可以作为学习入门的,并不适用于有一定规模的生产环境。另外,建议把测试域名泛解析到部署这台服务的机器。模块配置部署脚本业务模块的配置基本是通过部署脚本来操作的。 项目地址: https://github.com/xiongwilee...基本特性: 快捷部署多人nginx+php的开发测试环境,也可以扩展构建其...

    klinson 评论0 收藏0

发表评论

0条评论

fjcgreat

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<