一:首先安装docker:
admin:Docker详细安装教程zhuanlan.zhihu.com
二:其次安装gitlab:
admin:自己架构gitlab教程zhuanlan.zhihu.com
三:安装jenkins:
admin:jenkins详细安装教程zhuanlan.zhihu.com
四:持续集成测试:
1.新建SSH密匙
a.我这边是把密匙放在jenkins主目录里面的
cd /usr/local/jenkins_home
b.在jinkens_home里面新建一个.ssh文件夹
mkdir .ssh
c.先查看本机有没有安装git,输入git命令,返回-bash: git: command not found,就需要安装。用yum来安装:
sudo yum install -y git
d.安装完运行,输入git --version,出现以下返回代表安装成功:
git --version
git version 1.8.3.1
e.配置git,分别执行以下代码,注意名字和邮箱改成自己的。
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
f.接下来输入以下口令,生成密匙:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
回车后,输入密匙存放目录/usr/local/jenkins_home/.ssh/id_rsa
然后输入密码部分,我们不输入,直接回车,回车
出现以下画面即代表成功:
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): /usr/local/jenkins_home/.ssh/id_rsa
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /usr/local/jenkins_home/.ssh/id_rsa.
Your public key has been saved in /usr/local/jenkins_home/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:/2eGscYusCecc28ktLQdnL695AwcuLK7O+VxI9ucoAU your_
The key's randomart image is:
+---[RSA 4096]----+
| |
| |
| . . |
| E o.+ |
| S+.=.. |
| ..XoB. |
| ..Oo%oO. |
| Oo*.@== |
| =X *+++. |
+----[SHA256]-----+
2.新建gitlab项目
a.到SSH密钥存放的文件夹,查看id_rsa.pub里面的字符串,并复制。
cat /usr/local/jenkins_home/.ssh/id_rsa.pub
b.来到gitlab个人中心,点设置,左边点SSH密钥,右边填入id_rsa.pub里面的字符,然后点添加密钥即可。
c.新建一个gitlab项目
点第一个create a project
然后随便起个名字,点创底部建项目
如图这样就创建好了
3.创建一个jenkins项目
a. 点新建任务
b. 输入一个任务名称,下边选择第一个选项
c. 回到gitlab我们刚刚创建的项目,然后点克隆,复制SSH地址
d. 再回到jenkins刚刚创建的项目那边,顶部点源码管理,然后左边点Git,然后Repository URL里面填gitlab的项目SSH链接,此时下边会报错。
无法连接仓库:Command "/usr/bin/git ls-remote -h -- ssh://git@192.168.200.129:13822/root/test001.git HEAD" returned status code 128:
stdout:
stderr: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights and the repository exists.
e.来到密钥文件夹,查看私钥,并复制
cat /usr/local/jenkins_home/.ssh/id_rsa
f.点下边的添加,下拉里面的jenkins
g.类型选择SSH Username with private key,username里面填root,下边
Private Key | Enter directly |
a 点选Enter directly,然后点Add,将私钥粘贴进去,然后点添加即可。
h.然后点左边那个下拉,可以选择我们刚刚创建的私钥,选择后,警告就没了。
i.构建触发器设置,
点Build when a change is pushed to GitLab. GitLab webhook URL: http://192.168.200.129:11005/project/test-jenkins-1
然后点右下角“高级”
点Generate后,上边的Secret token会生成一串字符串。
刚刚上边的网址和下边的Secret token,我们后边要用:
j.来到gitlab,进入到项目,左下角点设置--webhooks。
将刚刚在jenkins里面得到的网址和Secret token,分别复制放在URL和Secret token里面
底部SSL verification下边Enable SSL verification勾选去掉,点Add webhook
添加完会出现下页面底部:
k.构建设置,增加构建步骤选择:执行shell
输入 echo 'Hello word' 。
然后点保存。
l:配置完成我们来测试下
来到gitlab项目下边,左边点击设置--webhooks,右边拖到最下边。
点击测试里面的Push events
此时,我这边报错了~~~~~~~~~~~~~
顶部报这个错误:Hook executed successfully but returned HTTP 500
可能是500错误,也可能是别的错误。别慌,我们来解决下错误
j:解决错误
经过几天的百度,这个是个权限问题,然后各种方法都尝试了,最后终于找到解决方法。
我这边出现的问题是密钥访问权限问题,应该是gitlab访问不了我存放在jenkins_home里面的私钥。
好了,解决问题吧:
首先我们测试下,从gitlab服务器上拉仓库到本地:
#来到jenkins_home目录
cd /usr/local/jenkins_home
#新建一个文件夹
mkdir test-demo
#拉仓库到文件夹
git clone ssh://git@192.168.200.129:13822/root/test001.git
#报以下错误
Cloning into 'test001'...
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
没错,没有权限。。。
我们输入:
ssh-agent -s
出现类似
SSH_AUTH_SOCK=/tmp/ssh-3jVEHO6R8Y6E/agent.91696; export SSH_AUTH_SOCK;
SSH_AGENT_PID=91697; export SSH_AGENT_PID;
echo Agent pid 91697;
继续输入
eval `ssh-agent -s`
然后再输入口令
ssh-add /usr/local/jenkins_home/.ssh/id_rsa
出现下边即代表成功
Identity added: /usr/local/jenkins_home/.ssh/id_rsa (/usr/local/jenkins_home/.ssh/id_rsa)
再次拉取测试
git clone ssh://git@192.168.200.129:13822/root/test001.git
出现了下边字符则表明成功:
Cloning into 'test-demo001'...
warning: You appear to have cloned an empty repository.
下边我们再测试下推送本地代码到gitlab服务器
下边代码,复制一行一行执行哦,汉字不要复制进去。
#新建一个文本文件
echo 'hell' > test.txt
#初始化一个git仓库
git init
#添加文件到仓库
git add test.txt
#第一步
git commit -m "first commit"
#添加文件到仓库第二步
git remote add origin ssh://git@192.168.200.129:13822/root/test001.git
#推送仓库到远程
git push -u origin master
当提示下边字符则表示成功
Counting objects: 3, done.
Writing objects: 100% (3/3), 209 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To ssh://git@192.168.200.129:13822/root/test001.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.
至此,权限问题解决了。
k:重新来测试下
来到gitlab项目下边,左边点击设置--webhooks,右边拖到最下边。
点击测试里面的Push events。
当顶部出现:Hook executed successfully: HTTP 200
则表示成功了。
来到jenkins项目下边,点击左边构建历史下边的,日期有下拉的,点击里面的控制台输出。
如果你看到下边字符,就成功了。
docker+gitlab+jenkins构建持续集成,踩了好多的坑。。。。。
激动的眼泪都快流下来了,今晚加跟鸡腿。