一、jenkins与gitlab互联

  1. 安装gitlab相关的插件
  2. 在jenkins服务机器上生成 ssh key
  3. 登陆gitlab配置ssh密钥-公钥
  4. 在jenkins上配置到gitlab无交互式拉取代码
    4.1 jenkins服务器上查看私钥
    4.2 jenkins控制台添加私钥
    gitlab上创建token
  5. 创建任务
    5.1 创建任务- 配置项目git地址- 选择配置的ssh证书- 立即构建
    5.2 项目仓库上面配置好了,没有报错表示jenkins可以从gitlab拉取代码了,点击立即构建
    5.3 查看控制台输出,验证构建结果
    5.4 去jenkins服务上验证项目是否pull下来了
    5.5 在jenkins服务器上配置与后端服务器互联
    5.6 在jenkins上配置构建
    5.7 通过shell命令的方式触发服务部署步骤【为了测试效果】
    5.8 查看控制台输出
    5.9 访问服务
    6 创建触发器
    6.1 代码仓库创建测试分支
    6.2 jenkins安装插件
    6.3 修改全局权限
    6.4 创建一个开发分支的任务
    6.5 生成一个token
    6.6 通过触发远程构建的方式构建触发器
    6.7 验证触发器
    6.8 在gitlab上配置触发器hook
    6.9 gitlab上测试效果

一、jenkins与gitlab互联
1. 安装gitlab相关的插件
在可用的插件处搜索gitlab插件

GitLab、Gitlab Authentication、GitLab Logo

Blue Ocean 最新版的jenkins已经自动安装了

2. 在jenkins服务机器上生成 ssh key
要想自动化让jenkins从gitlab上拉取代码,就需要配置ssh密钥,这样验证时就不用输入密码等操作了

# 如果是镜像部署jenkins的方式需求进入容器docker exec -it 容器id /bin/bash# 创建ssh密钥ssh-keygen# 查看生成的公钥 ~/.ssh/id_rsa.pubcat /root/.ssh/id_rsa.pubbash-5.0# ssh-keygenGenerating public/private rsa key pair.Enter file in which to save the key (/root/.ssh/id_rsa):Created directory '/root/.ssh'.Enter passphrase (empty for no passphrase):Enter same passphrase again:Your identification has been saved in /root/.ssh/id_rsaYour public key has been saved in /root/.ssh/id_rsa.pubThe key fingerprint is:SHA256:NELUf0otf4+lY24wF5Lmt/lDCkUWGNJ+EALe+6OIocE root@ab165f23961bThe key's randomart image is:+---[RSA 3072]----+|     .oo.o.o+.. ||     .. o o+ o   ||     ..oo..+.   ||       o .=.*o. ||       So Bo. . || .       o.= +..||   E .     o.*oB ||   o o . . ..O..||   . . . .   +.oo|+----[SHA256]-----+# 查看私钥bash-5.0# cat /root/.ssh/id_rsa  id_rsa     id_rsa.pub  # 查看公钥bash-5.0# cat /root/.ssh/id_rsa.pubssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDR3yL8WPCyZ1YdPZ0ndBpxpUZd5sxqpBg8AgsWMt8aYu5tzU7/4XrKMNaDVBHfhWFjgErY7WUhz4ZZtKF0vBdxrwAJFGcE/iytnyWIjm8NA9743osdcdEjkqwhr2g9/UmTh37Dfa1OqdEsecwRFeBu6KFdlFSlcXsaOKESq1QEDf96C+5u4uCavMvZj5PBAw5ekx22NaTWPEmGI/2xygn0yEeWvPrUzkX0M5EE64mczL/O/W/bW1RdvVaUBByvIytNDdQ1vUVvaoA+kR/t77H6jQ8C3Lr4y5SpA4I7pxMX/VSVzd9LhO60Bn8y18E8+hLLPOSEUbxWtS6WJ//pQj63cD7sL+e9nmRSVDwoCoDsCv9Bi0yR0Ub8NyQW+GgofRXdgDrOdR/Gqt4etq7OIIfslga7+TuSwsHARpxpbaenLu0AYYTYXVX4uEYsPLRlj3ebAlaz/0zXCKM9qIEfrCZZ1fm1PcQ5MQwohRA1log/dzegYFQ9ZN3Rd3raMj9g9CM= root@ab165f23961b

3. 登陆gitlab配置ssh密钥-公钥

在jenkins服务器上无需输入账密拉取代码

bash-5.0# git clone git@192.168.0.152:makemoney/testproject01.gitCloning into 'testproject01'...The authenticity of host '192.168.0.152 (192.168.0.152)' can't be established.ECDSA key fingerprint is SHA256:LsgUyXjraZbqPdGdwEgGnLHsbsREzqj5JJUmHerQ9oc.Are you sure you want to continue connecting (yes/no/[fingerprint])? yesWarning: Permanently added '192.168.0.152' (ECDSA) to the list of known hosts.remote: Enumerating objects: 11, done.remote: Counting objects: 100% (11/11), done.remote: Compressing objects: 100% (8/8), done.remote: Total 11 (delta 2), reused 0 (delta 0)Receiving objects: 100% (11/11), done.Resolving deltas: 100% (2/2), done.

4. 在jenkins上配置到gitlab无交互式拉取代码
jenkins - 系统管理-ManageCredentials - 全局凭据-添加凭据

4.1 jenkins服务器上查看私钥

bash-5.0# cat ~/.ssh/id_rsa# 然后将其复制到下图的公钥中

4.2 jenkins控制台添加私钥

其实凭据也可以是通过gitlab里创建的token,来实现jenkins与gitlab互联的

gitlab上创建token

用户头像---setting---access tokens

还有几种方式创建凭据

5. 创建任务
5.1 创建任务- 配置项目git地址- 选择配置的ssh证书- 立即构建


5.2 项目仓库上面配置好了,没有报错表示jenkins可以从gitlab拉取代码了,点击立即构建

5.3 查看控制台输出,验证构建结果

5.4 去jenkins服务上验证项目是否pull下来了
默认拉取的代码放在目录中cd /var/lib/jenkins/workspace/,仓库的代码放在以之间创建任务名为目录名的目录里

bash-5.0# cd workspace/testproject-testconnectbash-5.0# ls -lrttotal 12-rw-r--r-- 1 root jenkins 21 Nov 29 05:37 index.html-rw-r--r-- 1 root jenkins 35 Nov 29 05:37 first-test.txt-rw-r--r-- 1 root jenkins 62 Nov 29 05:37 README.md

5.5 在jenkins服务器上配置与后端服务器互联

### 首先得让jenkins与后端服务器无密连接# 生成密钥,这步刚才已经做了省略ssh-keygen# 将jenkins的公钥复制到后端预安装服务的机器上【本地的ssh公钥文件安装到远程主机对应的账户下authorized_keys】ssh-copy-id 远端服务的ip[root@python-node01 ~]# ssh-copy-id 192.168.0.150/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keysroot@192.168.0.150's password:Number of key(s) added: 1Now try logging into the machine, with:   "ssh '192.168.0.150'"and check to make sure that only the key(s) you wanted were added.# 然后测试下ssh登陆,时候需要密码ssh 192.168.0.150

5.6 在jenkins上配置构建
构建就是配置脚本或shell命令如何自动将服务部署起来

5.7 通过shell命令的方式触发服务部署步骤【为了测试效果】

# 脚本内容如下# 实现jenkins与生产服务器的免密登陆[如果下面这样写了,上面就不用手动在jenkins服务器上操作了]#ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.0.150# 切换目录到代码目录cd /var/lib/jenkins/workspace/power-test01# 打包压缩代码tar czvf code.tar.gz *# 将代码拷贝到生产服务器上scp code.tar.gz root@192.168.0.150:/app/code# 关闭现在运行的服务ssh root@192.168.0.150 "PID=\$(ps aux |grep -v grep |grep main.py|awk '{print \$2}');kill -9 \$PID"# 解包并将代码复制到部署目录中ssh root@192.168.0.150 "rm -rf /app/run/* && cd /app/code && tar xvf code.tar.gz -C /app/run"# 安装项目依赖包并运行服务ssh root@192.168.0.150 "cd /app/run && pip install -r requirements.txt && nohup python main.py >/dev/null 2>&1 &"

5.8 查看控制台输出

5.9 访问服务

更新代码,提交gitlab,然后jenkins点击任务的构建,服务就被更新了。

6 创建触发器
前面这种发现还是不够方便,开发人员更新代码后还需要手动操作jenkins构建,感觉还是很麻烦,那么解决方案就是创建触发器的方式,即当监控某个分支代码有变动时自动调用jenkins进行部署

6.1 代码仓库创建测试分支

# ide或git操作界面,换到项目中,然后创建分支cd ~/test-gitlab02/ && git branch dev-20201227 && git add . && git commit -m "test hook"

6.2 jenkins安装插件
系统管理-管理插件-可选插件-Gitlab Hook和Gitlab Authentication[之前已安装]

6.3 修改全局权限
修改为所有登陆用户可以任何操作

6.4 创建一个开发分支的任务
首页-新建任务-输入任务名-选择Freestyle project的方式创建

注:构建的任务job配置文件,在jenkins服务器的如下位置

[root@jenkins power-test01]# ll /var/lib/jenkins/jobs/总用量 0drwxr-xr-x 3 root   root    61 12月 27 23:50 power-devdrwxr-xr-x 3 jenkins jenkins 61 12月 27 20:52 power-test01

6.5 生成一个token
jenkins机器上创建一个token

[root@jenkins power-test01]# openssl rand -hex 12c8b2faf57578b62cb7b75105

6.6 通过触发远程构建的方式构建触发器

6.7 验证触发器

curl http://192.168.0.153:8080/job/power-dev/build?token=c8b2faf57578b62cb7b75105# 发现访问一次dev的任务就构建了一次,实验成功

6.8 在gitlab上配置触发器hook
在gitlab上配置触发器hook,从而实现push代码是,触发配置的url,从而联动jenkins构建部署操作

本次选择的是当仓库有更新事件发生是触发

6.9 gitlab上测试效果
test报错403错误时Hook executed successfully but returned HTTP 403,我们须要进入jenkins 系统设置-Configure Global Security中,关闭(去掉勾选:防止跨站点请求伪造),然后在点击gitlab webhooks test OK 返回201 成功。


老版本的jenkins是可以在安全配置里直接关闭csrf的,但Jenkins版本自2.204.6以来的重大变更有:删除禁用 CSRF 保护的功能。

需要修改jenkins配置文件/etc/sysconfig/jenkins

#JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true"JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true"# 修改好后重启jenkins即可systemctl restart jenkins && systemctl status jenkins


再次在gitlab上测试,发现ok了。

好了,通过Jenkins联动gitlab实现推送代码到仓库就自动部署就到这里了,我这里只是管中见豹,Jenkins发布还有通过pipline流水线方式,设置每步执行的任务,可视图方式查看每步执行过程,还有Jenkins单点压力过大,也支持搭建分布式等等,有很多方式就待我们一起去探索发现吧……

©著作权归作者所有:来自51CTO博客作者mob604756e88498的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. Python_学习之项目日志管理
  2. CI/CD笔记-Gitlab安装部署
  3. Docker_学习笔记系列之CentOs7安装docker
  4. CI/CD笔记-Jenkins的安装部署
  5. nginx搭建web服务器,配置端口复用
  6. 基于HBase和Spark构建企业级数据处理平台
  7. Python_学习之项目目录结构构建
  8. 如何构建一个完整的To B应用开发平台
  9. Kafka参数broker.id详解

随机推荐

  1. Android 获取手机信号
  2. android ViewFlipper实现图片轮播
  3. Android条形统计图实现
  4. ubuntu下搭建cordova开发环境
  5. android获得圆角图片
  6. Multitasking the android way
  7. Android 列表对话框
  8. android背景自动伸缩
  9. Android应用程序设置Home Screen
  10. android dialog集合