Jenkins docker部署springboot项目

发布于:2024-05-05 ⋅ 阅读:(24) ⋅ 点赞:(0)

1、创建jenkins容器

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

docker volume create jenkins_data

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

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

参数说明:

-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的密码:

docker logs jenkins

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

http://localhost:9999/

3,安装maven:

docker exec -it jenkins apt-get update
docker exec -it jenkins apt-get install -y maven

4,最后重启 jenkins 容器:

docker restart jenkins

2、创建jenkins项目:

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

在这里插入图片描述
配置参考:https://blog.csdn.net/cs888zsy/article/details/132910601

其中Jenkins file脚本如下:

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服务器:

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端口可以通:

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中增加如下配置:

PubkeyAuthentication yes

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

Match Group administrators
       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

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

docker exec -it jenkins ssh-keygen -t rsa

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

(3)右键authorized_keys,选择属性->安全->高级->(左下角)禁用继承;
弹框选择“将已继承的权限转换为此对象的显式权限”。

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

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

docker exec -it jenkins ssh -i /root/.ssh/id_rsa Administrator@192.168.0.107