Jenkins
Jenkins:
- 开源软件我的项目
- 基于Java开发的一种继续集成工具
- 用于监控继续反复的工作
旨在提供一个凋谢易用的软件平台, 便于软件的继续集成
基于Docker装置Jenkins
与继续集成中的GitLab Runner应该散布在不同的服务器上
- 创立工作目录: /usr/local/docker/jenkins
因为要在docker-compose.yml中应用volumes创立数据卷,执行命令赋予Docker数据卷权限:
chown -R 1000 /usr/local/docker/jenkins/data
在/usr/local/docker/jenkins创立docker-compose.yml
version: '3.1'services: jenkins:restart: alwaysimage: jenkinscontainer_name: jenkinsports:# 公布端口- 8080:8080# 基于JNLP的Jenkins代理通过TCP端口50000与Jenkins master进行通信- 50000:50000environment: TZ: Asia/shanghaivolumes: - ./data:/var/jenkins_home
执行docker-compose.yml文件启动Jenkins:
docker-compose up -d
解锁Jenkins: Jenkins第一次启动时须要输出初始密码解锁装置流程,应用命令查看初始密码
docker logs jenkins
应用自定义插件的形式装置Jenkins:
Dashboard ViewPublish Over SSHExtend Choice Parameter也能够在Jenkins运行界面中的Manage Jekins中的Manage Plugins自定义下载安装
配置Jenkins
配置JDK&Maven
- 上传JDK和Maven的tar包到服务器(容器的数据卷目录)
- Manage Jekins -> Global Tool Configuration
装置JDK,==留神:== JAVA_HOME的门路是==宿主机==目录:(宿主机是绝对宿体而言的)
/var/jenkins_home/jdk1.8.0_152
装置Maven,==留神:== MAVEN_HOME的门路是==宿主机==目录:(宿主机是绝对宿体而言的)
/var/jenkins_home/apache-maven-3.5.3
装置动静参数插件(Extend Choice Parameter)
- 目标是不便在做我的项目构建时依照版本进行构建
反对一键回滚
应用Jenkins实现继续交付
- Jenkins继续交付流程与GitLab Runner继续集成流程相似,只是GitLab Runner默认曾经配置好Git,Jenkins须要配置多一个GitLab的SSH登录
Jenkins继续交付流程:
- 拉取代码
- 打包构建
- 上传镜像
- 运行容器
保护清理
配置Jenkins的GitLab SSH免密登录
交互式进入Jenkins容器
docker exec -it jenkins /bin/bash
生成 SSH KEY
ssh-keygen -t rsa -C "email@example.com"
查看公钥
cat /var/jenkins_home/.ssh/id_rsa.pub
- 复制公钥到GitLab
克隆我的项目获取到known_hosts文件
配置Publish Over SSH
在Jenkins治理页面中零碎设置减少SSH Server配置
Name
测试环境-192.168.32.255
Hostname
192.168.32.255
Username
root
Remote Directory(宿主机中可操作的目录)
/usr/local/jenkins
高级:Password
123456
高级:Port
22
高级:Timeout(ms)
300000
继续交付依赖治理我的项目
第一步是实现所有我的项目的父工程依赖我的项目的继续交付
- 我的项目创立标签: 在GitLab中给我的项目创立标签(版本号)
- 创立Maven Project: 在Jenkins中新建一个基于Maven的工作
配置Maven Project: 配置第一次构建初始化
- General: 抛弃旧的构建
源码治理: Git
- Repository URL: ssh://git@192.168.32.255:8000/myshop/myshop-dependencies.git
- Branches to build: */master
第二次配置Maven Project开始应用
General: 参数化构建过程
Extended Choice Parameter:
- name: RELEASE_VERSION
- Basic Parameter Types: Parameter Type
Choose Source for Value:
Groovy Script
def var_key=['bash','-C','cd/var/jenkins_home/workspace/myshop-dependencies;git pull >/dev/null;git remote prune origin>/dev/null;git tag -l|sort -r |head -10']var_key.excute().text.tokenize('\n')
- 源码治理: none
Post Steps: Add post-build step
Excute shell
echo $RELEASE_VERSIONcd /var/jenkins_home/workspace/myshop-depedenciesgit checkout $RELEASE_VERSIONgit pull origin $RELEASE_VERSIONmvn clean package
Add post-build step: Send files or execute commands over SSH
SSH Publishers:
SSH Server:
- name: 测试环境-192.168.32.255
Transfers:
- Source files: /*.jar, docker/ (近程传送文件)
- (Remove prefix): target(删除近程传送过程中前缀为target的文件,只实用于在上传过程中删除,不会删除曾经上传胜利到近程服务器上的文件)
- Remote Directory: myshop-service-user-provider(近程创立目录,并把文件近程传送到此目录中)
Exec command (在近程服务器进行命令操作:进入provider目录,拷贝我的项目jar包到docker目录,进入docker目录,构建我的项目jar包的镜像,上传镜像,进行容器,启动容器,清理虚悬镜像)
cd /usr/local/jenkins/myshop-service-user-providercp target/myshop-service-user-provider-1.0.0-SNAPSHOT.jar dockercd dockerdocker build -t 192.168.32.133:5000/myshop-service-user-provider:v1.0.0docker push 192.168.32.133:5000/myshop-service-user-provider:v1.0.0docker-compose downdocker-compose up -ddocker image prune -f
- 保留
- Build with Parameters