赞
踩
1.更新yum源:
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
2.下载安装包
wget https://pkg.jenkins.io/redhat/jenkins-2.156-1.1.noarch.rpm
3.安装
rpm -ivh jenkins-2.156-1.1.noarch.rpm
4,修改配置:
vim /etc/sysconfig/jenkins
5,浏览器访问自己配置的端口
此时需要输入密码,具体看浏览器显示的那个路径,去看一下:cat xxx
6.安装插件 所有关于pipleline的插件都需要安装,如果安装有问题的,可以直接跳过,
此时会提醒更新最新版本Jenkins,点更新就好,
此时在这里更新刚刚没有下好的插件
(此时可以试一下该机器是否可以clone代码)
1.Jenkins中:
配置scm
这里的Jenkinsfile是放在项目中的,Jenkins构建时就会去找该脚本
脚本示范:
- // 需要在jenkins的Credentials设置中配置jenkins-harbor-creds、jenkins-k8s-config参数
- pipeline {
- agent any
- environment {
- HARBOR_CREDS = credentials('jenkins-harbor-creds')
- K8S_CONFIG = credentials('jenkins-k8s-config')
- GIT_TAG = sh(returnStdout: true,script: 'git describe --tags --always').trim()
- }
- parameters {
- string(name: 'HARBOR_HOST', defaultValue: '仓库ip', description: 'harbor仓库地址')
- string(name: 'DOCKER_IMAGE', defaultValue: 'tssp/pipeline-demo', description: 'docker镜像名')
- string(name: 'APP_NAME', defaultValue: 'pipeline-demo', description: 'k8s中标签名')
- string(name: 'K8S_NAMESPACE', defaultValue: 'demo', description: 'k8s的namespace名称')
- }
- stages {
- stage('Maven Build') {
- when { expression { env.GIT_TAG != null } }
- agent {
- docker {
- image 'maven:3-jdk-8-alpine'
- args '-v $HOME/.m2:/root/.m2'
- }
- }
- steps {
- sh 'mvn clean package -Dfile.encoding=UTF-8 -DskipTests=true'
- stash includes: 'target/*.jar', name: 'app'
- }
-
- }
- stage('Docker Build') {
- when {
- allOf {
- expression { env.GIT_TAG != null }
- }
- }
- agent any
- steps {
- unstash 'app'
- sh "docker login -u ${HARBOR_CREDS_USR} -p ${HARBOR_CREDS_PSW} ${params.HARBOR_HOST}"
- sh "docker build --build-arg JAR_FILE=`ls target/*.jar |cut -d '/' -f2` -t ${params.HARBOR_HOST}/${params.DOCKER_IMAGE}:${GIT_TAG} ."
- sh "docker push ${params.HARBOR_HOST}/${params.DOCKER_IMAGE}:${GIT_TAG}"
- sh "docker rmi ${params.HARBOR_HOST}/${params.DOCKER_IMAGE}:${GIT_TAG}"
- }
-
- }
- stage('Deploy') {
- when {
- allOf {
- expression { env.GIT_TAG != null }
- }
- }
- agent {
- docker {
- image 'lwolf/helm-kubectl-docker'
- }
- }
- steps {
- sh "mkdir -p ~/.kube"
- sh "echo ${K8S_CONFIG} | base64 -d > ~/.kube/config"
- sh "sed -e 's#{IMAGE_URL}#${params.HARBOR_HOST}/${params.DOCKER_IMAGE}#g;s#{IMAGE_TAG}#${GIT_TAG}#g;s#{APP_NAME}#${params.APP_NAME}#g;s#{SPRING_PROFILE}#k8s-test#g' k8s-deployment.tpl > k8s-deployment.yml"
- sh "kubectl apply -f k8s-deployment.yml --namespace=${params.K8S_NAMESPACE}"
- }
-
- }
-
- }
- }
1.在Jenkins中配置令牌:
如果没有此功能,这是由于权限问题导致的
注释:跨站请求伪造保护最新Jenkins页面无法开启,在安装目录设置:
vim /etc/sysconfig/jenkins
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true"
配置后需要重启jenkins:
service jenkins restart
生效后就如前图所示
2.复制链接到刚刚gitab打开的触发器页面:
此时如果gitlab设置Webhooks报错Urlis blocked: Requests to localhost are not allowed。admin 登录设置
然后再添加完毕:
然后可以测试一下:
返回201,说明成功(注意 JENKINS_URL/job/jobname/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME)
此时Jenkins的构建任务也在运行了
最好是用安装办maven,案例中使用的maven是docker镜像,想修改setting文件的话有点麻烦
如果使用当机器的maven,此时需要下载Jenkins的maven插件:
全局配置中要配置一下
还有环境变量也要配置一下:
这时才可以在Jenkinsfile中使用mvn命令
3.dockerbuild:
这里步骤中的五句话:
第一句,使用的哪个app包
第二句,登录Harbor
第三句,制作临时镜像 ,此时会使用到dockerfile,可以参考docker的搭建,写一个dockerfile,示范:
- FROM openjdk:8-jdk-alpine
-
- #构建参数
- ARG JAR_FILE
- ARG WORK_PATH="/opt/demo"
- # 环境变量
- ENV JAVA_OPTS="" \
- JAR_FILE=${JAR_FILE}
- # 切换源
- RUN sed -i 's/http\:\/\/dl-cdn.alpinelinux.org/https\:\/\/mirrors.ustc.edu.cn/g' /etc/apk/repositories
-
- #设置时区
- RUN apk update && apk add ca-certificates && \
- apk add tzdata && \
- ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
- echo "Asia/Shanghai" > /etc/timezone
-
- COPY target/$JAR_FILE $WORK_PATH/
-
- WORKDIR $WORK_PATH
-
- ENTRYPOINT exec java $JAVA_OPTS -jar $JAR_FILE
示范中的命令:
这个有可能因为网络原因下载失败,此时在他的上一步添加一行切换源就可以了:
RUN sed -i 's/http\:\/\/dl-cdn.alpinelinux.org/https\:\/\/mirrors.ustc.edu.cn/g' /etc/apk/repositories
注意:哪个项目需要发布的,dockerfile就在哪个项目下
第四句,推送镜像
第五句,删除本地临时镜像
4.发布:
这里使用的kubectl镜像命令发布
四句话:
第一句,创建文件夹
第二句 ,寻找下一步使用的config,来验证k8s
第三句,这个项目中有个发布模板,参考k8s搭建中发布模板,这个命令是讲参数写入模板.tpl,生成发布文件yml ,附上tpl示范:
- apiVersion: apps/v1
- kind: Deployment
- metadata:
- name: {APP_NAME}-deployment
- labels:
- app: {APP_NAME}
- spec:
- replicas: 1
- selector:
- matchLabels:
- app: {APP_NAME}
- template:
- metadata:
- labels:
- app: {APP_NAME}
- spec:
- containers:
- - name: {APP_NAME}
- image: {IMAGE_URL}:{IMAGE_TAG}
- ports:
- - containerPort: 40080
- env:
- - name: SPRING_PROFILES_ACTIVE
- value: {SPRING_PROFILE}
第四句,发布
还需要配置k8s的kube.config,示范配置:
apiVersion: v1kind: Configclusters:- name: "test" cluster: server: "https://ip" api-version: v1 certificate-authority-data: "xxxxxx"users:- name: "root" user: token: "你的token"contexts:- name: "test" context: user: "user1" cluster: "test"current-context: "test
然后编码:
base64 kube-config.yml > kube-config.txt
然后类似上一步,在jenkins凭据中增加配置文件内容。在凭据设置界面,类型选择为“Secret text”,ID设置为“jenkins-k8s-config”(此处的ID必须与Jenkinsfile中的保持一致),Secret设置为上面经过base64编码后的配置文件内容。
成功后可以在镜像仓库中查看到镜像:
可以在k8s面板中看到运行的服务:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。