伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

CI/CD笔记-Jenkins与gitlab实现CICD

来源:本站原创 浏览:117次 时间:2022-02-28

一、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单点压力过大,也支持搭建分布式等等,有很多方式就待我们一起去探索发现吧……

  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net