.net core Jenkins持续集成Linux、Docker、K8S
jenkins插件
系统管理 -> 管理插件,安装如下插件。
#如果搜索不到去掉Plugin在搜索
GitLab Plugin
Gitlab Hook Plugin
#使用Gitlab账号做用户权限管理,可选(也可集成LDAP)
Gitlab Authentication plugin
Docker plugin
docker-build-step
SSH plugin
GitLab Plugin配置
在GitLab中配置,创建个人访问令牌后获取到令牌备用

系统管理 -> 系统设置 中 左上角 'Jenkins > 配置' 选择GitLab

- Connection Name随便填;
- Git Host URL填GitLab的域名地址,例如http://gitlab.yourdomain.com/;
- Credentials配置;
Credentials配置
- 类型选择GitLab API token
- 将令牌填充到API token中
- 描述 名称

创建构建任务
新建任务 -> 输入名称 选择构建一个自由风格的软件项目;完成后进入配置。
源码管理 -> Git;
Repository URL:中填入gitlab项目对应的ssh路径(eg:git@git.cn:group/sample.app.git);

Credentials:设置添加SSH私钥;

同时在gitlab(http://xxx/profile/keys)添加ssh公钥

- 构建触发器 -> 勾选Build when a change is pushed to GitLab;
将GitLab webhook URL: http://xxx/group/sample.app、Secret token添加到gitlab(http://xxx/group/sample.app/settings/integrations)


构建环境 -> 勾选Delete workspace before build starts、Add timestamps to the Console Output;
构建 -> 增加构建步骤 -> 执行 shell;
添加sh脚本,jenkins服务需要安装dotnet。
如果需要.netcore多版本环境参考CentOS 7 下安装部署.NET Core多版本环境。
#!/bin/sh
pwd
ls
echo $PATH
whoami
which dotnet
dotnet --info
dotnet --version
echo '=====dotnet 方式====='
dotnet restore
cd ./src/sample.app
rm -rf $WORKSPACE/jenkins_publish
mkdir -p $WORKSPACE/jenkins_publish
dotnet publish -o $WORKSPACE/jenkins_publish
scp -r $WORKSPACE/jenkins_publish/* root@xx.xx.xx.xx:/home/Web
echo '=====Docker swarm方式====='
GITHASH=`git rev-parse --short HEAD`
echo $GITHASH
cd $WORKSPACE
docker login xx.xx.xx.xx -u admin -p HarborPwd
docker build -t img-name:$GITHASH . -f src/Dockerfile
docker tag img-name:$GITHASH xx.xx.xx.xx/img-name:$GITHASH
docker push xx.xx.xx.xx/img-name:$GITHASH
#清理容器
docker rm $(sudo docker ps -a -q)
#清理image
docker images|grep none|awk '{print $3}'|xargs docker rmi
cat>test.yml<<EOF
version: '3.4'
services:
img-name:
image: xx.xx.xx.xx/img-name:$GITHASH
environment:
ASPNETCORE_ENVIRONMENT: 'dev'
volumes:
- /etc/localtime:/etc/localtime:ro
ports:
- target: 80
published: 9527
mode: host
deploy:
mode: global
EOF
#拷贝到docker swarm所在服务器
scp test.yml root@xx.xx.xx.xx:/root
echo '=====K8s 方式====='
GITHASH=`git rev-parse --short HEAD`
echo $GITHASH
cd $WORKSPACE
docker login xx.xx.xx.xx -u admin -p HarborPwd
docker build -t img-name:$GITHASH . -f src/Dockerfile
docker tag img-name:$GITHASH xx.xx.xx.xx/img-name:$GITHASH
docker push xx.xx.xx.xx/img-name:$GITHASH
#清理容器
docker rm $(sudo docker ps -a -q)
#清理image
docker images|grep none|awk '{print $3}'|xargs docker rmi
cat>test.yaml<<EOF
apiVersion: v1
kind: Service
metadata:
labels:
app: api-service
name: api-service
spec:
#type: NodePort #nodeport方式暴露
selector:
app: api-service
ports:
- protocol: TCP
port: 80
targetPort: 80
#nodePort: 30002 #端口范围只能是 30000-32767,不指定随机分配
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: api-service-ingress
namespace: default
spec:
rules:
- host: api.xxxx.com #域名
http:
paths:
- path: /
backend:
serviceName: api-service
servicePort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-service-deployment
spec:
selector:
matchLabels:
app: api-service
replicas: 1
template:
metadata:
labels:
app: api-service
spec:
containers:
- name: api-service
image: xx.xx.xx.xx/api-service:$GITHASH
imagePullPolicy: Always
ports:
- containerPort: 80
volumeMounts:
- name: timezone
mountPath: /etc/localtime
volumes:
- name: timezone
hostPath:
path: /etc/localtime
imagePullSecrets:
- name: secret-name
EOF
#拷贝到k8s master所在服务器
scp test.yaml root@xx.xx.xx.xx:/usr/local/src
- 构建 -> 增加构建步骤 -> Build / Publish Docker Image;
在上面直接使用shell命令,未使用此功能

- 构建 -> 增加构建步骤 -> Execute shell script on remote host using ssh;
部署

#Command中shell脚本
echo '=====虚拟机方式====='
supervisorctl restart youserver-name
echo '=====Docker swarm 方式====='
docker -v
docker stack deploy -c test.yml --with-registry-auth test
echo '=====K8s 方式====='
cd /usr/local/src
kubectl apply -f .
kubectl get pod
虚拟机方式

Docker swarm方式

K8s 方式

.net core Jenkins持续集成Linux、Docker、K8S的更多相关文章
- .net core jenkins持续集成
执行 Shell pwd ls echo ${PATH} whoami which dotnet dotnet --info dotnet --version echo '============== ...
- Docker+Jenkins持续集成环境(5): android构建与apk发布
项目组除了常规的java项目,还有不少android项目,如何使用jenkins来实现自动构建呢?本文会介绍安卓项目通过jenkins构建的方法,并设计开发一个类似蒲公英的app托管平台. andro ...
- Docker+Jenkins持续集成
Docker+Jenkins持续集成 使用etcd+confd实现容器服务注册与发现 前面我们已经通过jenkins+docker搭建了基本的持续集成环境,实现了服务的自动构建和部署,但是,我们遇 ...
- 基于Kubernetes/K8S构建Jenkins持续集成平台(上)-2
基于Kubernetes/K8S构建Jenkins持续集成平台(上)-2 Kubernetes实现Master-Slave分布式构建方案 传统Jenkins的Master-Slave方案的缺陷 Mas ...
- 基于Kubernetes/K8S构建Jenkins持续集成平台(下)
基于Kubernetes/K8S构建Jenkins持续集成平台(下) Jenkins-Master-Slave架构图回顾: 安装和配置NFS NFS简介 NFS(Network File System ...
- Docker+Jenkins持续集成环境(4):使用etcd+confd实现容器服务注册与发现
前面我们已经通过jenkins+docker搭建了基本的持续集成环境,实现了服务的自动构建和部署,但是,我们遇到一个问题,jenkins构建出来的镜像部署后,需要通过ip:port去访问,有什么更好的 ...
- 基于Kubernetes/K8S构建Jenkins持续集成平台(上)-1
基于Kubernetes/K8S构建Jenkins持续集成平台(上)-1 Jenkins的Master-Slave分布式构建 什么是Master-Slave分布式构建 Jenkins的Master-S ...
- Jenkins持续集成学习-搭建jenkins问题汇总
目录 Jenkins持续集成学习5-搭建jenkins问题汇总 目录 前言 问题列表 nuget还原包问题 编译问题 SVN更新问题 参考文档 Jenkins持续集成学习5-搭建jenkins问题汇总 ...
- 持续集成之应用k8s自动部署
持续集成之应用k8s自动部署 Intro 上次我们提到了docker容器化及自动化部署,这仅仅适合个人项目或者开发环境部署,如果要部署到生产环境,必然就需要考虑很多因素,比如访问量大了如何调整部署,如 ...
随机推荐
- HDU-4725.TheShortestPathinNyaGraph(最短路 + 建图)
本题思路:主要是建图比较麻烦,因为结点可以在层与层之间走动,也可以在边上进行走动,所以主要就是需要找到一个将结点和层统一化处理的方法. 所以我们就可以对于存在边的结点建边,层与层之间如果层数相差一也建 ...
- select2插件设置选中值并显示的问题
在select2中,要想设置指定值为选中状态并显示: $("#select2_Id").val("XXXXX").select2() 或者 var obj= $ ...
- java_23 File类
1.File类定义: 文件和目录路径的抽象表达形式,java中将路径或者文件封装成File对象. 2.File类的静态成员变量(pathSeparator 分隔符,字符串 separat ...
- Python开发——数据结构【深浅拷贝】
浅拷贝 # 浅拷贝只copy一层 s = [3,'Lucy',4,[1,2]] s1 = s.copy() 深拷贝 # 深拷贝——克隆一分 import copy s = [3,'Lucy',4,[1 ...
- vue 需求 data中的数据之间的调用
我遇到过这种情况 就是在我的data中 会有数据调用data中的其他数据 如图 我的alertInfoType需要拿到screeningCondition中type的值 用过vue的都知道 我是不 ...
- javaweb开发.eclipse使用小常识
一.javabean快速生成 1.写好属性,如 package me.lst.domain; import java.io.Serializable;import java.sql.Date; /** ...
- (百度)centos7上安装apache指南
https://jingyan.baidu.com/album/c843ea0bb5ff3977931e4a14.html?picindex=1 原文就不拷贝了.留个网址
- python基础之Day7part1集合
一.集合 1.定义 s=set() 2.特点 每个元素必须是不可变类型,但集合本身是可变类型的,有add和remove等功能 3.用途 去重(原理:for循环if判断元素是否已存在,不存在则追加) 关 ...
- 学习UI设计书籍推荐
在学习UI设计的过程当中,特别想学或者零基础的人来说,需要学习到很多知识,比如软件 PS AI ,理论 色彩 排版 规范 UE 等,这些都是一名UI设计师需要学习的知识,而学习到这些知识,可以通过视频 ...
- 《C#从现象到本质》读书笔记(八)第10章反射
<C#从现象到本质>读书笔记(八)第10章反射 个人感觉,反射其实就是为了能够在程序运行期间动态的加载一个外部的DLL集合,然后通过某种办法找到这个DLL集合中的某个空间下的某个类的某个成 ...