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
相关推荐
一个假的前端男3 分钟前
Windows Docker Desktop安装及使用 Docker 运行 MySQL
windows·docker·容器
ahuang12024 分钟前
在centos下使用containerd管理容器:5分钟从docker转型到containerd
linux·docker·centos
2401_8401922713 分钟前
OpenStack基础架构
运维·服务器·openstack
小马爱打代码18 分钟前
125个Docker的常用命令
运维·docker·容器
某风吾起20 分钟前
Linux 消息队列的使用方法
java·linux·运维
xiao-xiang23 分钟前
jenkins-k8s pod方式动态生成slave节点
java·kubernetes·jenkins
胡八一1 小时前
解决docker: ‘buildx‘ is not a docker command.
运维·docker·容器
石明亮(JT)1 小时前
docker部署jenkins
java·docker·jenkins
小张认为的测试2 小时前
Jenkins邮件通知的详细配置含邮件通知模板!
java·servlet·ci/cd·jenkins·邮件通知
Мартин.2 小时前
[Meachines] [Easy] GoodGames SQLI+Flask SSTI+Docker逃逸权限提升
python·docker·flask