1

Jenkins使用教程

 2 years ago
source link: https://chenshinan.github.io/2019/12/08/Jenkins%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Jenkins使用教程

发表于 2019-12-08

字数统计 842 字

|

阅读时长 3 分钟

什么是Jenkins

Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,基于Java开发的,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。常用的版本控制工具有SVN、GIT,构建工具有Maven、Ant、Gradle

mac用户推荐使用homebrew安装

// 安装
brew install jenkins
// 后台启动
brew services start jenkins
// 另一种启动方式:前台启动
// jenkins
// 停止
brew services stop jenkins

注意:安装时选择安装所有推荐的插件,否则CI时部分功能会报错

CI/CD是什么

CI(Continuous integration,中文意思是持续集成)是一种软件开发时间。持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。借用网络图片对CI加以理解

image

CD(Continuous Delivery, 中文意思持续交付)是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。比如,我们完成单元测试后,可以把代码部署到连接数据库的Staging环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境。下图反应的是CI/CD 的大概工作模式

image

构建流水线

通过提供的账号密码登陆

image

新建任务,选择流水线,可以复制一个原有的任务

image

勾选“丢弃旧的构建记录”,并设置要手动输入的参数,这里设置了git要拉取分支名

image

设置流水线脚本

image

pipeline {
agent any
options { timestamps() }
environment {
REPOSITORY="[email protected]:gov-cloud/myProject.git"//project gitlab address
TARGET_FILE="target/myProject.jar" // target file path
IMAGE_NAME="myProject" //docker image name
DOMAIN_NAME="registry-docker.com" //推送的域名地址
DOCKER_FILE="/Users/chenshinan/work/file/docker-deploy/myProject-dockerfile" //本地DockerFile的路径
CP_PROPERTIES="cp /Users/chenshinan/work/file/docker-deploy/myProject.properties ./src/main/resources/application.properties" //本地复制properties
APP_NAME="myProject" // 应用名

}
stages {
stage('拉代码') {
steps {
echo 'start clone code forom git:${REPOSITORY}'
deleteDir() //递归删除WORKSPACE下的文件和文件夹
git (
branch:"${env.branch}",
credentialsId:"06ef5819-d19c-4207-b545-a0ed87170e57",
url:"${REPOSITORY}",
changelog:true
)
sh("git branch && git log -3")
}
}
stage('编译代码') {
steps {
echo "start compile source code"
sh("${CP_PROPERTIES}")
sh("mvn clean package -Dmaven.test.skip=true -DskipTests=true")
sh("ls -lat ${TARGET_FILE}")
}
}
stage('拉基础镜像') {
steps {
script {
echo "start pull base image!"
sh("docker pull ${DOMAIN_NAME}/base-centos-7")
}
}
}
stage('构建镜像') {
steps {
script {
echo "start build image!"
sh("docker build --build-arg JAR_NAME=${TARGET_FILE} -f ${DOCKER_FILE} -t ${DOMAIN_NAME}/${IMAGE_NAME}:${env.BUILD_TIMESTAMP}_${currentBuild.id} .")
echo "image vsersion:${env.BUILD_TIMESTAMP}_${currentBuild.id}"
}
}
}
stage('推送镜像到仓库') {
steps {
echo "start push image to repository!"
sh("docker push ${DOMAIN_NAME}/${IMAGE_NAME}:${env.BUILD_TIMESTAMP}_${currentBuild.id}")
}
}
}
}

Jenkins的思维导图

image


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK