我的环境是windows系统,使用Docker Desktop制作了gitlab容器和jenkins容器,也可以在虚拟机上使用docker。
一.环境准备
gitlab有镜像我们直接使用即可,jenkins镜像有一些环境没有,我们在它的基础上添加一些环境。
需要准备的文件比较多,我百度网盘共享一下。
链接:https://pan.baidu.com/s/1K7FD-ngQQip0rgEjxQy7TA?pwd=q3ec
提取码:q3ec
docker-compose文件中,容器卷共享,我是windows系统,如果你是linux系统需要修改一下文件路径。容器卷共享一定要加,否则容器有什么问题,数据就全丢失了。改前面为宿主机路径即可。
# 使用官方的Jenkins基础镜像
FROM jenkins/jenkins
# 切换用户为root
USER root
# 定义变量
ENV MAVEN_VERSION="3.6.3" \
NODE_VERSION="14.21.3"
# 设置工作目录
WORKDIR /usr/local/
ADD ./zipFile/apache-maven-${MAVEN_VERSION}-bin.tar.gz /usr/local/
ADD ./zipFile/node-v${NODE_VERSION}-linux-x64.tar.gz /usr/local/
# 建立maven软连接
RUN ln -s /usr/local/apache-maven-${MAVEN_VERSION}/bin/mvn /usr/bin/mvn
# 建立nodejs软连接
RUN ln -s /usr/local/node-v${NODE_VERSION}-linux-x64/bin/node /usr/bin/node
# 建立npm软连接
RUN ln -s /usr/local/node-v${NODE_VERSION}-linux-x64/bin/npm /usr/bin/npm
# 设置Jenkins的工作目录
ENV JENKINS_HOME /var/jenkins_home
# 暴露Jenkins的HTTP端口
EXPOSE 8080
二.制作镜像并运行docker容器
进入jenkins目录,运行docker-compose -f docker-compose.yml build制作镜像。
制作成功后使用docker-compose -f docker-compose.yml up -d运行容器,然后进去gitlab目录使用docker-compose -f docker-compose.yml up -d运行容器。
运行成功后,使用docker ps查看是否运行正常。
三.修改gitlab配置信息
进入gitlab目录下映射的data文件夹,找到config下的gitlab.rb文件,在文件中加入以下内容:
gitlab_rails['gitlab_email_from'] = "123456@qq.com"
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "123456@qq.com"
gitlab_rails['smtp_password'] = "你对应qq的smtp密码"
gitlab_rails['smtp_domain'] = "smt.qq.com"
gitlab_rails['smtp_authentication'] = 'login'
gitlab_rails['smtp_tls'] = true
user['git_user_email'] = "123456@qq.com"
配置这个之前,需要你的邮箱开启smtp协议。配置这个之后,就可以给他人发送邮件了。
四.配置jenkins
找到该文件复制密码输入
选择安装推荐的插件
等待安装完毕
创建用户或者使用admin用户继续
配置地址供他人使用,然后点击保存并完成
开始使用jenkins
添加凭据,供jenkins拉取gitlab的项目,用户名是gitlab中存在的用户即可,密码是对应用户的密码
配置Global Pipeline Libraries库,供所有部署的项目使用一套脚本即可。gitlab创建一个项目存放脚本文件
jenkins找到这个位置配置pipeline libraries
选择刚才的凭据然后点击保存
五.创建一个pipeline项目
输入名字,选择流水线,然后点击确定
找到流水线,选择如下内容
如果不配凭据,会报如下内容,配置一个在git上的项目
maven项目下需有Jenkinsfile文件
文件内容如下
六.与远程主机建立ssh免密连接
由于没有远程主机可使用,现在使用jenkins所在的容器去连接宿主机进行部署,步骤是一样的,如果需要改别的服务器,只需把ip地址一换就可以,其它步骤是一样的。
本文宿主机是windows系统,所以使用windows系统进行演示
先进入jenkins的docker容器
输入ssh-keygen,一路回车即可。
在远程服务器先安装openssh,双击即可完成
使用cmd查看是否安装成功,出现以下信息即成功安装
也输入ssh-keygen命令,一路回车即可。因为我生成过了,我就不做演示了。
进入下图所示的文件夹,修改sshd_config文件
将最下面的这两行注释掉,这一步关系到能否免密连接
进入映射的.ssh文件夹,复制id_rsa.pub这个文件并改名为authorized_keys,然后放到下面截图下的.ssh文件夹下。
net stop sshd
net start sshd
使用这两个命令重启服务器的sshd服务
再次进入到jenkins容器里,使用ssh 12289@192.168.2.178连接远程服务器,第一次输入yes,有的会让你输入该用户的密码,第二次可直接进入
现在一切准备就绪,可以开始部署了。
七.部署项目
修改刚刚创建的pipeline项目,选择选项参数
看一下我配的,根据自己的项目和服务器进行配置
点击这个build with paramerters,看一下参数,没问题点击build进行部署
点击变更历史中的console output,看看是否有报错
最后输出success即成功
第一次程序会运行失败,因为没有添加任务计划程序,但是jenkins会运行成功,此时手动添加任务计划程序,windows在搜索中找到任务计划程序。
为什么不是用命令行内的方式运行是因为jenkins在断开ssh连接的时候,会将它所创建的衍生进程都关掉,所以只能使用任务计划程序这种方式。
D:\study\selfGitlabProject\jenkins\startJar.bat 7081 mail-1.0-SNAPSHOT.jar D:\study\deploymail-1.0-SNAPSHOT
按照自己的项目修改即可,脚本文件是后台运行java程序的,所以日志得在脚本里修改一下
勾选使用最高权限运行
查看项目下是否有日志生成,如果有就说明运行成功了。文章来源:https://www.toymoban.com/news/detail-794042.html
文章来源地址https://www.toymoban.com/news/detail-794042.html
到了这里,关于【运维篇】基于docker,jenkins结合gitlab做自动部署的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!