Coding持续集成实现远程部署运行
项目:Java + Spring + Docker
原理:coding通过ssh私钥凭证访问服务器,执行项目的脚本使用git下拉最新代码并打包运行。
一.Git免登录下拉Coding代码
linux中免登录下拉Coding代码:https://blog.csdn.net/qq_40286424/article/details/118359130
附上:
Docker文件
FROM openjdk:8-jdk-alpine
RUN echo "Asia/Shanghai" > /etc/timezone; #时区
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
start.sh脚本
#!/bin/bash
cd /home/xx/projectName #项目位置
git pull origin master #coding的分支 注这里ssh下拉代码才会免登录
mvn package -Pprod -Dmaven.test.skip=true #mvn打包
docker build -t projectName:latest . #docker打包
docker stop projectName | true #停止当前运行的projectName容器
docker rm projectName | true #删除projectName容器
docker run -p 9070:9070 --network parking-net --network-alias projectName --restart always -d --name projectName projectName:latest #network是docker的内部网络 -p 9070端口映射
二.coding中导入凭证
2.1生成服务器的ssh私钥
ps;这个与coding生成的不是同一个。
cd ~/.ssh
ssh-keygen -t rsa
#如果存在id_rsa文件会提示输入新文件名fileName,不输入会覆盖原文件。
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): fileName
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in fileName.
Your public key has been saved in fileName.pub.
The key fingerprint is:
SHA256:+N6yhF7g/XRg6tPQMfGyqCnoRISrp46yd3LCcFzWfMU [email protected]
The key’s randomart image is:
±–[RSA 2048]----+
| . |
| . E |
|. . o . o |
| o o o… + . |
|…o o.Soo= |
|o.o . =ooo. |
|.+o. ooo. . |
|o+ +.o=o+… |
|*=.= … ++o |
±—[SHA256]-----+
2.2 xx项目-》项目设置-》开发者选项-》录入凭证-》选择ssh私钥 输入私钥创建
复制fileName私钥文件的内容
三.创建构建计划
3.1 持续集成-》构建计划-》选择“Java + Spring + Docker”
3.2 配置构建计划
修改构建计划名称 xx
(1)代码仓库:代码源-》coding-》关联代码仓库
(2)单元测试: 不启动
(3)编译构建:./gradlew build (默认)
(4)构建Docker镜像
名称:xx
Docker文件位置: 服务器存储项目的Docker文件地址
Docker 构建目录: . (默认)
Docker 镜像版本:分支名-修订版本号( G I T L O C A L B R A N C H : − b r a n c h − {GIT_LOCAL_BRANCH:-branch}- GITLOCALBRANCH:−branch−{GIT_COMMIT})(默认)扫描二维码关注公众号,回复: 13352671 查看本文章
(5)推送推送到 CODING Docker 制品库
Docker 制品库:xx(没有就新建xx)
(6)部署到远端服务:启用
目标服务地址 :xx.xx.xx.xx
SSH 端口 : 22
SSH 用户名 : root
SSH 登陆凭据 : 选择1.2创建的凭证
3.3 修改构建
删除多余步骤
部署步骤的脚本为;
def remoteConfig = [:]
remoteConfig.name = "my-remote-server"
remoteConfig.host = "${REMOTE_HOST}"
remoteConfig.allowAnyHosts = true
// 使用 SCP 作为文件传输
remoteConfig.fileTransfer = "scp"
withCredentials([sshUserPrivateKey(
credentialsId: "${REMOTE_CRED}",
keyFileVariable: "privateKeyFilePath"
)]) {
// SSH 登陆用户名
remoteConfig.user = "${env.REMOTE_USER_NAME}"
// SSH 私钥文件地址
remoteConfig.identityFile = privateKeyFilePath
sshCommand(
remote: remoteConfig,
command: "sh /home/xx/projectName/start.sh",
sudo: false,
)
echo "部署成功!!"
}