先看看官网的一些操作提示
1、创建SSH密钥对
2、创建制品仓库
看完官网的介绍,持续集成需要提前准备好SSH凭证和制品仓库,下面将让我们动手开始吧
一、创建SSH密钥对
登录服务器控制台,创建 SSH 密钥对。获取私钥对后将其录入至 CODING 中的 凭据管理 中,将公钥 id_rsa.pub 的内容复制到服务器的 ~/.ssh/authorized_keys 中。
ssh-keygen -m PEM -t rsa -b 4096 -C "your.email@example.com"
二、录入凭据--SSH私钥
创建好后将列表的凭据ID记录下来
三、 创建制品仓库
创建好后将命令记录下来,里面包含了三个参数,用户名、密码、host
四、构建后端
1、Pipeline 脚本
/opt/coding/ 是我的云服务器jar包所在地,/opt/coding/ start.sh 是启动的脚本
def remoteConfig = [:]
remoteConfig.name = "my-remote-server"
remoteConfig.host = "${REMOTE_HOST}"
remoteConfig.port = "${REMOTE_SSH_PORT}".toInteger()
remoteConfig.allowAnyHosts = true
withCredentials([
sshUserPrivateKey(
credentialsId: "${REMOTE_CRED}",
keyFileVariable: "privateKeyFilePath"
),
usernamePassword(
credentialsId: "${CODING_ARTIFACTS_CREDENTIALS_ID}",
usernameVariable: 'CODING_DOCKER_REG_USERNAME',
passwordVariable: 'CODING_DOCKER_REG_PASSWORD'
)
]) {
// SSH 登录用户名
remoteConfig.user = "${REMOTE_USER_NAME}"
// SSH 私钥文件地址
remoteConfig.identityFile = privateKeyFilePath
// 请确保远端环境中有 Docker 环境
sshCommand(
remote: remoteConfig,
command: "docker login -u ${CODING_DOCKER_REG_USERNAME} -p ${CODING_DOCKER_REG_PASSWORD} ${CODING_DOCKER_REG_HOST}",
sudo: true,
)
stage("推送文件") {
sshPut remote: remoteConfig, from: "target/monkey.jar" , into: '/opt/coding/'
}
sshCommand(
remote: remoteConfig,
command: "sh /opt/coding/start.sh",
sudo: true,
)
echo "部署成功"
}
2、环境变量
3、云服务器配置
# Dockerfile
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD monkey.jar docker-monkey.jar
ENTRYPOINT ["java","-Xms500m","-Xmx500m","-XX:MetaspaceSize=256m","-XX:MaxMetaspaceSize=500m", "-jar","/docker-monkey.jar"]
# start.sh
cd /opt/coding/
docker build -t monkey .
docker stop monkey | true
docker rm monkey | true
docker run -v /lanren312/docker-workspace/nginx/html/file/monkey/:/lanren312/docker-workspace/nginx/html/file/monkey/ -it -m 512M -p 9001:9001 \
--restart always -d --name=monkey monkey:latest
配置完成后,点击 立即构建,稍等一会就可以看到构建成功,当你修改代码提交到仓库,coding的持续集成就会自动同步代码,不用再去手动同步代码了。
五、构建前端
1、Pipeline 脚本
将前端打包的文件 /monkey 拷贝到了 /lanren312/docker-workspace/nginx/html/ 目录下
def remoteConfig = [:]
remoteConfig.name = "my-remote-server"
remoteConfig.host = "${REMOTE_HOST}"
remoteConfig.allowAnyHosts = true
withCredentials([
sshUserPrivateKey(
credentialsId: "${REMOTE_CRED}",
keyFileVariable: "privateKeyFilePath"
),
usernamePassword(
credentialsId: "${CODING_ARTIFACTS_CREDENTIALS_ID}",
usernameVariable: 'CODING_DOCKER_REG_USERNAME',
passwordVariable: 'CODING_DOCKER_REG_PASSWORD'
)
]) {
// SSH 登陆用户名
remoteConfig.user = "${REMOTE_USER_NAME}"
// SSH 私钥文件地址
remoteConfig.identityFile = privateKeyFilePath
// 删除文件 ps: 这个是后面加的..
sshCommand remote: remoteConfig, command: "rm -rf /lanren312/docker-workspace/nginx/html/monkey"
stage("推送文件") {
sshPut remote: remoteConfig, from: "./monkey" , into: '/lanren312/docker-workspace/nginx/html/'
}
echo "部署成功"
}
六、记录构建中碰到的问题
1、后端
提交工单,客服回复 “Auth fail是ssh密钥认证失败,麻烦本地检查一下密钥是否能够正常连接到目标服务器”,后发现公钥 id_rsa.pub 的内容复制到服务器的 ~/.ssh/authorized_keys 中时不一致导致,复制要仔细哦
2、前端
持续构建,发现云服务上的文件时间没有更新,其实内容是更新了的。
完