Jenkins docker部署springboot项目

1、创建jenkins容器

1,首先,我们需要创建一个 Jenkins 数据卷,用于存储 Jenkins 的配置信息。可以通过以下命令创建一个数据卷:

c 复制代码
docker volume create jenkins_data

启动 Jenkins 容器并挂载数据卷:

c 复制代码
docker run -dit --name=jenkins -p 9999:8080 -u=root --restart=always -v jenkins_data:/var/jenkins_home jenkins/jenkins

参数说明:

c 复制代码
-i:表示运行容器
-t:表示容器启动后会进入其命令行
-d:守护式方式创建容器在后台运行
--name:容器名称
-p 9999:8080:端口映射,宿主机端口:jenkins 容器端口
-u=root:指定容器用户为 root 用户
--restart=always 参数用于在容器重启时自动启动,这样即使容器被删除,数据卷的数据也不会丢失
-v jenkins_data:/var/jenkins_home jenkins/jenkins:将数据卷 "jenkins_data" 挂载到容器的 /var/jenkins_home 目录上

2,然后执行以下命令,获取解锁jenkins的密码:

c 复制代码
docker logs jenkins

浏览器登陆,输入上面日志的密码,并按提示安装插件:

c 复制代码
http://localhost:9999/

3,安装maven:

c 复制代码
docker exec -it jenkins apt-get update
docker exec -it jenkins apt-get install -y maven

4,最后重启 jenkins 容器:

c 复制代码
docker restart jenkins

2、创建jenkins项目:

1,重新登陆 jenkins,点 New Item,新建流水线项目:

配置参考:https://blog.csdn.net/cs888zsy/article/details/132910601

其中Jenkins file脚本如下:

c 复制代码
pipeline {
  agent any
    stages {
        
        stage('拉取代码') {
            agent none
            steps {
                echo '=====================拉取代码开始====================='
                git(url: 'https://github.com/xxx.git', credentialsId: 'JackyZhang8888', branch: 'main', changelog: true, poll: false)
                echo '=====================拉取代码完成====================='

            }
        }
        
        
        stage('编译打包') {
            steps {
                    echo '=====================项目编译打包开始====================='
                    sh 'mvn clean package -Dmaven.test.skip=true'
                    echo '=====================项目编译打包完成====================='
            }
        }
        
        stage('拷贝项目') {
            steps {
                    echo '=====================拷贝项目路径开始====================='
                    sh '''
                    BASE_DIR="/application"
                    SOURCE_DIR="/var/jenkins_home/workspace/FileSystem/target/"
                    DATE_FORMAT="%Y%m%d"
                    DT=$(date +$DATE_FORMAT)
                    TARGET_FOLDER="$BASE_DIR/$DT"
                    
                    if [ ! -d "$TARGET_FOLDER" ]; then
                        mkdir -p "$TARGET_FOLDER"
                    fi
                    
                    cp $SOURCE_DIR/*.jar "$TARGET_FOLDER"
                    cp $SOURCE_DIR/*.jar "$BASE_DIR"

                    '''
                    echo '=====================拷贝项目路径完成====================='
            }
        }

        stage('Deploy') {
            steps {
                echo '=====================拷贝远程部署开始====================='
                // sshCommand remote: [name: 'Remote Server', command: 'cd /path/to/your/app && ./deploy.sh'], failOnError: true
                echo '=====================拷贝远程部署完成====================='
            }
        }
    }
}

3,部署springboot到远程服务器

Publish Over SSH + OpenSSH:通过windows端安装openssh与jenkins建立ssh隧道可以实现sftp传输文件和远程执行命令

1、首先需要先在远程windows服务器安装openssh。通过PowerShell安装OpenSSH服务器:

c 复制代码
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'

这些命令首先添加OpenSSH服务器功能,然后启动SSH服务,并将其设置为开机自动启动。也可以进入Windows 10 设置-应用-可选功能,添加可选应用,找到OpenSSH服务端并安装。

此时,验证容器telnet 22端口可以通:

c 复制代码
docker exec -it jenkins telnet 192.168.0.107 22
Trying 192.168.0.107...
Connected to 192.168.0.107.
Escape character is '^]'.
SSH-2.0-OpenSSH_for_Windows_8.1

2、配置免密登陆:

(1)在C:\ProgramData\ssh\shd_config中增加如下配置:

c 复制代码
PubkeyAuthentication yes

并在在该配置文件中确定公钥路径administrators_authorized_keys的位置:

c 复制代码
Match Group administrators
       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

这表明对于管理员用户,公钥授权文件应该位于%ProgramData%/ssh/administrators_authorized_keys中。

非管理员用户需要将上述sshd_config内容注释掉,其他电脑的ssh公钥添加到C:\Users\username\.ssh\authorized_keys中。

(2)jenkins容器内生成SSH密钥对:

c 复制代码
docker exec -it jenkins ssh-keygen -t rsa

将生成的公钥复制到远程服务器上的authorized_keys文件中,默认路径C:\Users\Administrator\.ssh\

(3)右键authorized_keys,选择属性->安全->高级->(左下角)禁用继承;

弹框选择"将已继承的权限转换为此对象的显式权限"。

(4)Win键+R键,输入并运行services.msc,打开服务列表,检查OpenSSH Authentication Agent服务是否正常运行。如果是禁用状态需要启用,然后重启一下sshd服务

此时重启openssh后jenkins服务器中使用如下命令连接windows应该是没问题的:

c 复制代码
docker exec -it jenkins ssh -i /root/.ssh/id_rsa Administrator@192.168.0.107
相关推荐
pk_xz12345637 分钟前
Shell 脚本中变量和字符串的入门介绍
linux·运维·服务器
小珑也要变强39 分钟前
Linux之sed命令详解
linux·运维·服务器
Lary_Rock3 小时前
RK3576 LINUX RKNN SDK 测试
linux·运维·服务器
追风林6 小时前
mac 本地docker-mysql主从复制部署
mysql·macos·docker
一坨阿亮6 小时前
Linux 使用中的问题
linux·运维
城南vision8 小时前
Docker学习—Docker核心概念总结
java·学习·docker
wclass-zhengge8 小时前
Docker篇(Docker Compose)
运维·docker·容器
李启柱8 小时前
项目开发流程规范文档
运维·软件构建·个人开发·设计规范
力姆泰克9 小时前
看电动缸是如何提高农机的自动化水平
大数据·运维·服务器·数据库·人工智能·自动化·1024程序员节
BPM_宏天低代码10 小时前
低代码 BPA:简化业务流程自动化的新趋势
运维·低代码·自动化