基于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
如图所示:
之后保存。
直接执行权限chmod +x docker.sh
2、拉取jenkins镜像
docker pull jenkins:alpine #镜像选择了alpine版本的镜像,占用空间更小
如果拉取速度太慢,可以使用阿里云镜像加速,复制如下命令,执行即可
[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 ~]#
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
之后容器正常启动
之后进入/data/jenkins目录找到这个文件
secrets/initialAdminPassword
复制里面的内容,后面安装jenkins有用
由于jenkins容器做了映射,在第三步中 -v /data/jenkins:/var/jenkins_home容器内部的目录映射到真是操作系统中。
因此里面的密钥文件在我系统的路径为
/data/jenkins/secrets/initialAdminPassword
在容器内部,密钥文件的内部地址如下:
/var/jenkins_home/secrets/initialAdminPassword
4、安装jenkins
在浏览器输入 服务器IP地址+8080端口即可出现安装页面
填入上面的密钥文件内容后点击继续
自定义自己需要安装的插件
选好之后点击安装即可
插件安装完毕之后,需要设置一个管理员帐号和密码
至此,jenkins安装完毕。
现在开始,可以创建一个新的项目了
配置jenkins和gitlab
新建一个任务,
填写好项目的名称和,选择一个构建一个自由风格的软件项目
项目名称需要谨慎填写,因为会根据项目名称创建文件夹
添加一些描述
在源码管理处,选择git ,填写git仓库地址,
填好好之后,点击一下add按钮,添加一个ssh私钥文件(添加好之后,系统会有记录,下次不用在添加)
kind—选择ssh方式,username—-需要填写gitlab的账户电子邮箱
在私钥的地方粘贴.ssh文件夹下的id_rsa件内容
(关于ssh文件夹,在文章后面单独详细说明)
触发器构建,选择如下:(需要复制后面的service url地址)
之后点击高级按钮
生成一个secret token(这个需要复制到gitlab当中)
gitlab和jenkins通讯,需要这个token和上面的那个url
登录到gitlab页面,管理需要自动部署的代码仓库,编辑webhooks配置
url填写上面的jenkins生成的,token也是,其他的根据配置需要打勾,之后点击确定
至此一切配置完毕,就可以愉快的进行自动部署了
测试
在本地电脑上面新建一个static项目,然后添加文件,推动到远程服务器master分支
推送完毕后,jenkins已经可以自动拉取了
之后,回到jenkins服务器中,查看是否已经把文件自动拉取。
可以看到,服务器上面已经存在刚才创建和推送的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去拉取代码。