基于Jenkins的持续集成与部署实践

目录

1.设计要求:

2.方案

3.实施步骤

3.1 准备

3.2 安装:

docker

git 

jenkins

Jenkins 系统配置

Jenkins 项目与任务

3.3 与GitLab集成

3.4 备份


1.设计要求:

  • 基于docker安装与部署,以保持系统的一致性和可维护性
  • 同步/部署的项目数据能自动/手动根据任务配置,版本分支部署
  • 假设有git 项目仓库t1,  t1的staging(自动)和live(手动)分支部署到目标主机目录
  • 支持备份

2.方案

- 安装 docker / git / jenkins / posfix / dovecot

- 新增系统用户 git (用于拉取仓库), jenkins (用于调用shell脚本与收邮件)

3.实施步骤

3.1 准备

- 用户 jenkins 属组

[root@vmtpl01 ~]# id jenkins
uid=1002(jenkins) gid=1002(jenkins) groups=1002(jenkins),10(wheel),1003(www-data)

- 域名:git.{xxx}.com / jenkins.{xxx}.com / mail.{xxx}.com / smtp.{xxx}.com

- 用户密匙两对: for git / jenkins

- 开放防火墙端口  

# jenkins访问
firewall-cmd --add-port=8080/tcp --permantent

# 邮件相关
firewall-cmd --add-port=25/tcp --permantent
firewall-cmd --add-port=110/tcp --permantent
firewall-cmd --add-port=143/tcp --permantent

3.2 安装:

docker

$ sudo yum install -y yum-utils
$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
 
$ sudo yum install docker-ce docker-ce-cli containerd.io

git 

$ yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel
$ yum install git
sudo groupadd git
sudo useradd git -g git

拷贝用户公匙到 /home/git/.ssh/authorized_keys

cat {path}/id_rsa.pub >> /home/git/.ssh/authorized_keys

初始化git仓库 (git@git.xxx.com:/data/gitrespo/t1.git):

$ mkdir /mnt/gitrepo
$ chown git:git /mnt/gitrepo
$ cd /mnt/gitrepo
$ git init --bare t1.git
$ chown -R git:git t1.gi

用配好的git用户访问t1, 上传一些测试文件

jenkins

方式一 (docker compose 方式)

docker-compose.yml, jenkins数据将保存在 /var/lib/docker/volumes/jenkins_jenkins_data & jenkins_jenkins_docker_certs

version: '3'
services:
    jenkins:
        restart: always
        image: jenkinsci/blueocean:latest
        container_name: jenkins
        privileged: true
        ports:
            - '8080:8080'
            - '50000:50000'
        volumes:
            - 'jenkins_data:/var/jenkins_home'
            - 'jenkins_docker_certs:/certs/client'
            - '/usr/bin/docker:/usr/local/bin/docker'
            
volumes:
    jenkins_data:
        driver: local
    jenkins_docker_certs:
        driver: local

方式二 (传统方式)分别安装与运行两个镜像 docker:dind 与 jenkinsci/blueocean, 其中做了 /mnt 映射

首先,建立容器间通信,建立相关的volumes以持久化应用数据 (将保存在/var/lib/docker/volumes)

docker network create jenkins
docker volume create jenkins_docker_certs
docker volume create jenkins_data
docker container run \
  --name jenkins-docker \
  --detach \
  --privileged \
  --network jenkins \
  --network-alias docker \
  --env DOCKER_TLS_CERTDIR=/certs \
  --volume jenkins_data:/var/jenkins_home \
  --volume jenkins_docker_certs:/certs/client \
  --volume /mnt:/mnt \
  --publish 2376:2376 \
  --restart=always \
  docker:dind


docker container run \
  --name jenkins-blueocean \
  --detach \
  --network jenkins \
  --env DOCKER_HOST=tcp://docker:2376 \
  --env DOCKER_CERT_PATH=/certs/client \
  --env DOCKER_TLS_VERIFY=1 \
  --publish 8080:8080 \
  --publish 50000:50000 \
  --volume jenkins_data:/var/jenkins_home \
  --volume jenkins_docker_certs:/certs/client:ro \
  --volume /mnt:/mnt \
  --restart=always \
  jenkinsci/blueocean

Jenkins 系统配置

安装插件:SSH plugin / SSH

系统管理 =》Manage Credentials =》凭据:添加 git和jenkins 的私匙

系统管理 =》系统配置 =》全局属性 配环境变量键值对列表: 
- $RSYNC :  /usr/bin/rsync

系统管理 =》系统配置 =》SSH remote hosts

邮件通知

Jenkins 项目与任务

- 新建项目文件夹T1

- 在T1下构建 “一个自由风格的软件项目” webapp_staging

- 源码管理

- 触发器定义(git提交后调用),不需要则略过

-- 定义令牌,远程访问url如: JENKINS_URL/view/all/job/T1/job/webapp_staging/build?token=xxxx

-- git hook 定义步骤:

  •  在jenkins的要用户管理新添访问用户 “api-builder” 及其密码
  • 编辑在git服务器上面的仓库 t1.git/hooks/post-receive,内容:
#!/bin/sh

curl http://api-builder用户:api-builder密码@{domain}:8080/view/all/job/T1/job/webapp_staging/build?token=XXXX

注:记得 chown git:git post-receive, chmod 755 post-receive 

- 构建

- sh 脚本

#!/bin/bash

/usr/bin/rsync -avzP  -e "ssh -i /data/Auths/ssh/jenkins/id_rsa" /mnt/jenkins_git_repos/t1_staging/ jenkins@{IP}:/data/Projects/Test/t1/staging  --delete --chown=nginx:nginx --exclude-from=/data/Settings/common/exclude.list

测试结果,完成。 

3.3 与GitLab集成

当仓库在gitlab上,而且需要做webhook时,参考以下配置:

首先,编辑任务,让它在push staging分支时触发:如下图配置,注意  webhook URL 和 secret token都是不一样的!

 其次,进入gitlab项目(如:Ben Bi > iot-age-te001 > Webhook Settings > Webhook),填入对应项目,然后进行提交测试。

3.4 备份

应用thinbackup 插件备份方案 (jenkins备份与恢复【转】 - paul_hch - 博客园)

备份路径: /data0/Server/Backups/jenkins

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bennybi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值