最近发现coding平台是真的舒服,项目协同、仓库、制品、测试、文档、构建部署应有尽有。尽管年底公司实行10106,上周还是抽空把coding上的自动化部署流程搭建起来了。
此次项目为java项目,在Coding上实现了Jenkins+Docker的持续集成流程。最终达到的效果是:当有代码合并或者提交到master分支后,出发项目构建并部署到指定的服务器上。效果图如下,当然这里还需要加上测试模块,前期求快就先省略了。
1 前期工作
1.1代码仓库
最近在做一个小项目,随便玩转一下coding,就再coding上开了一个项目,也使用的coding上的代码仓库。目前coding上的项目构建部署也只支持Coding一个代码源,gitlab和github还不支持。
1.2 Docker仓库
coding项目构建部署对于Docker仓库没有限制。
ps:coding支持的制品库还挺多的,maven、npm、PyPI等
2 搭建持续集成流程
2.1 Dockerfile文件编写
FROM java:8
MAINTAINER "Aaron"
ADD target/cms-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 8083
ENTRYPOINT ["java", "-jar","/app.jar"]
2.2 Coding构建流程配置文件
pipeline {
agent any
stages {
stage('检出') {
steps {
checkout([$class: 'GitSCM', branches: [[name: env.GIT_BUILD_REF]],
userRemoteConfigs: [[url: env.GIT_REPO_URL, credentialsId: env.CREDENTIALS_ID]]])
}
}
stage('构建') {
steps {
echo '构建中...'
sh 'mvn clean install'
echo '构建完成.'
}
}
stage('生成镜像') {
steps {
echo '生成镜像中……'
sh 'cd cms'
sh 'ls cms'
sh 'docker build -t ${image_name} -f cms/.deploy/Dockerfile ./cms'
echo '生成镜像完成'
}
}
stage('推送镜像') {
steps {
echo '推送中...'
sh 'docker login -u jdocker-user -p ${docker_token} {you_item}.pkg.coding.net'
sh 'docker push ${image_name}'
echo '推送完成'
}
}
stage('部署') {
steps {
echo '部署中...'
script {
def remote = [:]
remote.name = 'server'
remote.allowAnyHosts = true
remote.host = '{填写你的服务器host}'
withCredentials([usernamePassword(credentialsId: '{coding凭证生成id}', passwordVariable: 'password', usernameVariable: 'user')]) {
remote.user = user
remote.password = password
sshCommand remote: remote, command: "docker pull ${image_name}"
sshCommand remote: remote, command: "docker stop ${project_name} | true"
sshCommand remote: remote, command: "docker rm ${project_name} | true"
sshCommand remote: remote, command: "docker run -p 8083:8083 --name ${project_name} -d ${image_name}"
}
}
echo '部署完成'
}
}
}
}