基于-docker的jenkins-gitlab实现自动部署

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/diyiday/article/details/78921843

基于docker安装jenkins

参考文章:http://blog.csdn.net/ruangong1203/article/details/73065410
https://www.cnblogs.com/kevingrace/p/6479813.html

公司有个需求,需要实现当代码推送到master分支时,自动触发拉取,实现如下:

环境:
操作系统:centos7
软件:docker,jenkins,gitlab

1、安装docker:

创建一个docker.sh文件,里面填入如下内容:

#!/bin/bash 
yum -y install wget 
cd /etc/yum.repos.d/
wget http://mila.oss-cn-shenzhen.aliyuncs.com/docker.repo
yum clean all && yum makecache
cd /root
wget http://mila.oss-cn-shenzhen.aliyuncs.com/soft/docker-engine-17.05.0.ce-1.el7.centos.x86_64.rpm
yum -y localinstall ./docker-engine-17.05.0.ce-1.el7.centos.x86_64.rpm
systemctl enable docker
systemctl start docker

如图所示:

1

之后保存。

直接执行权限chmod +x docker.sh

2、拉取jenkins镜像

docker pull jenkins:alpine    #镜像选择了alpine版本的镜像,占用空间更小

1

如果拉取速度太慢,可以使用阿里云镜像加速,复制如下命令,执行即可

[root@Filecdn ~]# 
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://9b655nj0.mirror.aliyuncs.com"]
[root@Filecdn ~]# sudo tee /etc/docker/daemon.json <<-'EOF'
> {
>   "registry-mirrors": ["https://9b655nj0.mirror.aliyuncs.com"]
> }
> EOF
{
  "registry-mirrors": ["https://9b655nj0.mirror.aliyuncs.com"]
}
sudo systemctl daemon-reload
[root@Filecdn ~]# 

1

3、运行命令,生成一个jenkins容器

docker run  --name jenkins -p 8080:8080 -p 50000:50000 -v /data/jenkins:/var/jenkins_home -it -d jenkins:alpine

直接运行命令后,jenkins容器是无法直接运行的,无法启动,查看日志
直接运行命令后,jenkins容器是无法直接运行的,无法启动,查看日志
直接运行命令后,jenkins容器是无法直接运行的,无法启动,查看日志

docker logs jenkins

发现,原来是jenkins的目录的权限不够,于是对目录进行授权

chmod -R 777 /data/jenkins

之后再次启动jenkins容器

docker start jenkins

之后容器正常启动
1

1

之后进入/data/jenkins目录找到这个文件

secrets/initialAdminPassword

复制里面的内容,后面安装jenkins有用

1

由于jenkins容器做了映射,在第三步中 -v /data/jenkins:/var/jenkins_home容器内部的目录映射到真是操作系统中。
因此里面的密钥文件在我系统的路径为

/data/jenkins/secrets/initialAdminPassword

在容器内部,密钥文件的内部地址如下:

/var/jenkins_home/secrets/initialAdminPassword

4、安装jenkins

在浏览器输入 服务器IP地址+8080端口即可出现安装页面
填入上面的密钥文件内容后点击继续

1

自定义自己需要安装的插件
1

1

选好之后点击安装即可

1

插件安装完毕之后,需要设置一个管理员帐号和密码

1

1

至此,jenkins安装完毕。

现在开始,可以创建一个新的项目了
1

配置jenkins和gitlab

新建一个任务,

填写好项目的名称和,选择一个构建一个自由风格的软件项目
项目名称需要谨慎填写,因为会根据项目名称创建文件夹

1

添加一些描述

1

在源码管理处,选择git ,填写git仓库地址,

1

填好好之后,点击一下add按钮,添加一个ssh私钥文件(添加好之后,系统会有记录,下次不用在添加)

1

kind—选择ssh方式,username—-需要填写gitlab的账户电子邮箱
在私钥的地方粘贴.ssh文件夹下的id_rsa件内容
(关于ssh文件夹,在文章后面单独详细说明)

1

触发器构建,选择如下:(需要复制后面的service url地址)

1

之后点击高级按钮
生成一个secret token(这个需要复制到gitlab当中)
gitlab和jenkins通讯,需要这个token和上面的那个url

1

登录到gitlab页面,管理需要自动部署的代码仓库,编辑webhooks配置

1

url填写上面的jenkins生成的,token也是,其他的根据配置需要打勾,之后点击确定

1

至此一切配置完毕,就可以愉快的进行自动部署了

测试

在本地电脑上面新建一个static项目,然后添加文件,推动到远程服务器master分支

1

推送完毕后,jenkins已经可以自动拉取了

1

之后,回到jenkins服务器中,查看是否已经把文件自动拉取。

1

可以看到,服务器上面已经存在刚才创建和推送的111.txt文件

至此所有操作完毕。

结尾关于 .ssh文件的说明

服务器之间的通讯,可以使用密码通讯,也可以使用ssh密钥进行通讯,在一些自动化部署,不需要人工干预的操作,大多使用ssh密钥通讯,这样免去了输入密码的操作。
git和gitlab或者jenkins通讯也需要ssh文件。

怎么使用.ssh文件

在linux用户进入用户家目录 (如果是windows用户下载一个git-windows客户端)
里面有详细说明和下载地址:http://blog.csdn.net/diyiday/article/details/78533902
运行

ssh-keygen -t rsa -C "test@qq.com"

加入你是root用户,就会在root目录下生成一个.ssh隐藏文件,
这个里面有三个文件

id_rsa  id_rsa.pub  known_hosts

id_rsa是私钥文件

-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAxCJ+9e6ZQn8Z7Mp1e34uSvboxkNI0b8+Miouw2TDuaff8abB
4DGJsn7+n266oHQoBk5gwm/LQx12/Nl5dJtf054kEY3AYaQQBYVtUBqbytYYVybG
3aFmw+BYhNHWdsXaYLle30WjkEzWGE37aiBQC8fvfTeW6+LxvjMhmvJRMRBH96xa
YcDq9+jpNeY2a3cwGddkP2GWkb1p5ygsrEuywv0WkQ1P5+rlgxbB4Ky2CqwgMIqW
GzzFTjuxXDSsvKUZlCXTqLUvDZAaR76J9jKCn9hDAoGBANTqucnH0hDOnoh2t2fX
GauKED/qlom89rbPdDxnh5GKdCszJuKvbuaEtBh/z/qW6BUsEX1L1adz5hraHMWE
FRfmhj+ipa5FK8zvLNgv14UOvGoW+qKtlVBecENe6fWykqUQ3RTQBwiwy+HKSn4N
YxsCbPkS82OwCARVwW/YqUutAoGBAK2Qdqzd1HS0oHHnhl3pn1H4DP7pMhHxQJzK
V+I58ylF9WPW0iLDKJ3mAfLCzvLpdm4pYV3XKCPMGC65Tyat45VOQVbXfJwqvkNa
rEhObdnf5JPZZ1R3hZnI92OMtjgXLblIkslc8ynhFtmQ0L/872/geX5DoTEdsLa9
CtlIBqN7AoGAN30SUF+Lg7+7fwpzeWEpB+1RhJMNzzfWljc7DvST3Tb5Uc/MN8bq
ec/1k1cBSOdt0TiLwGXn7ybg16jzFgoni1xfdDn2v4sCAeZp60W5cogZtZvEEUU1
WTb9oNEHGn00fTOlQbsHjRf8yqdXnUzsFwMg++zVmFPzFaaQmfLiO2k=
-----END RSA PRIVATE KEY-----

id_rsa.pub是公钥文件

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDEQ0jRvz4yKi7DZMO5p9/xpsHgMYmyfv6fbrqgdCgGTmDCb8tDHXb82Xl0m1/TniQRjcBhpBAFhW1Q9N5br4vG+MyGa8lExEEf3AZ12Q/YZaRvWnnKCysS7LC/RaRDU/n6uWDFsHgrLYKrCAwipborOmnuUAXr1Y0HubeZq/4E83jaL5WQSPygi9X4Rzi+rrp5e+3b/TXCx5hy4JcHzRvnWyOkEaqv8oqw2lI0Zh+aqVSodFua7igGqY1 test@qq.com

known_hosts文件保存授权记录
如果你需要和其他服务器通讯,你就需要把你的私钥或者公钥复制给对方服务器去验证,这样才可以实现无密码通讯。

在gitlab和jenkins中,

gitlab配置中,添加了test@qq.com这个邮箱用户的 id_rsa.pub公钥文件,
jenkins配置中,因此添加test@qq.com这个邮箱用户的 id_rsa私钥文件,

这样就实现了服务器之间身份验证,于是就可以拉取代码。

gitlab和jenkins中,通过webhook通讯检测gitlab中是否有代码更新,如果有更新,就出发jenkins去拉取代码。

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试