一、基于jenkins和gitlab的ci cd
1)基于docker安装gitlab
1.1)pull镜像
docker pull gitlab/gitlab-ce:latest 官方镜像 docker pull registry.cn-hangzhou.aliyuncs.com/imooc/gitlab-ce:latest 阿里云镜像
1.2)在固定位置。建立启动脚本
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#!/bin/bash HOST_NAME=gitlab.mooc.com #GITLAB_DIR=`pwd` GITLAB_DIR=/data/gitlab docker stop gitlab docker rm gitlab docker run -d \ --hostname ${HOST_NAME} \ -p 9443:443 -p 9080:80 -p 2222:22 \ --name gitlab \ -v ${GITLAB_DIR}/config:/etc/gitlab \ -v ${GITLAB_DIR}/logs:/var/log/gitlab \ -v ${GITLAB_DIR}/data:/var/opt/gitlab \ registry.cn-hangzhou.aliyuncs.com/imooc/gitlab-ce:lateststart.sh
执行sh start.sh 。生成持久化的存储的目录
[root@node01 ~]# ll /data/gitlab/ total 8 drwxrwxr-x 3 root root 239 Jun 28 18:01 config drwxr-xr-x 18 root root 4096 Jun 28 17:56 data drwxr-xr-x 19 998 root 314 Jun 28 17:56 logs -rw-r--r-- 1 root root 399 Jun 28 17:54 start.sh
1.2)访问gitlab
第一次登陆,创建root账号的登陆密码
注册一个普通账户进行持久化的测试
1.3)普通用户创建一个私有仓库
1.4)创建好项目后,需要添加ssh-key。在需要使用git的服务器上面把id_rsa.pub添加进来
二、安装jenins
需要提前配置 java环境 mvn环境
1.1) 安装jenkins
https://jenkins.io/zh/doc/pipeline/tour/getting-started/
下载war包: http://mirrors.jenkins.io/war-stable/latest/jenkins.war
java -jar jenkins.war --httpPort=8080 运行过程中会生成一个密码
1.2) 配置插件。选择插件安装
需要把 pipelines的都添加进来
1.3)安装好插件后,创建账号
2) 测试流水线
里面暂时什么也不做配置,直接构建任务,查看流水线 是否正常执行
三、gitlab与jenkins
1)在jenkins中配置 job
钩子为JENKINS_URL/job/test/build?token=TOKEN_NAME ==》 http://192.168.1.5:8080/job/test/build?token=123456
1.1) 在全局设置中
去掉跨站点伪造保护
2)在gitlab中,选择 Intergrations,配置钩子,触发的条件。push代码就触发一些动作
2.1)配置钩子地址(为jenins的地址令牌)
2.2)此时配置该项,无法生效。无法向本地网络发送请求。请修改下面配置
2.3)钩子配置了测试。模拟发送push请求
在jenins中可看到最新构建的任务
四、编辑流水线语法
1)可查看流水线语法
2)流水线拉取代码编写
#!groovy pipeline { agent any environment { REPOSITORY="[email protected]:root/myapp.git" } stages { stage('获取代码') { steps { echo "start fetch code from git:${REPOSITORY}" deleteDir() git "${REPOSITORY}" } } } }
直接在jenkins上面构建查看是否能执行成功
构建成功后会在Jenkins的服务器上生成一个文件
五、流水线到k8s的镜像更新
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#!groovy pipeline { agent any environment { REPOSITORY="[email protected]:root/myapp.git" MODULE="user-edge-service" SCRIPT_PATH="/opt/scripts" } stages { stage('获取代码') { steps { echo "start fetch code from git:${REPOSITORY}" deleteDir() git "${REPOSITORY}" } } stage('代码静态检查') { steps { echo "start code check" } } stage('编译') { steps { echo "start compile" sh "mvn -U -pl ${MODULE} -am clean package" } } stage('构建镜像') { steps { echo "start build image" sh "${SCRIPT_PATH}/build-images.sh ${MODULE}" } } stage('发布系统') { steps { echo "start deploy" sh "${SCRIPT_PATH}/deploy.sh user-service-deployment ${MODULE}" } } } }View Code
在构建镜像需要执行脚本
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#!/bin/bash MODULE=$1 TIME=`data "+%Y%m%d%H%M"` GIT_REVISION=`git log -1 --pretty=format:"%h"` IMAGE_NAME=harbor.com:8080/test/${MODULE}:${TIME}_${GIT_REVISION} cd ${MODULE} docker build -t ${IMAGE_NAME} . cd - docker push ${IMAGE_NAME} echo "${IMAGE_NAME}" > IMAGE_NAMEbuild-images.sh
chmod 755 build-images.sh
在服务进行镜像更新时
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#!/bin/bash IMAGE=`cat IMAGE_NAME` DEPLOYMENT=$1 MODULE=$2 echo "updata image to:${IMAGE}" kubect set image deployments/${DEPLOYMENT} ${MODULE}=${IMAGE}deploy.sh
chmod 755 deploy.sh
六、纯粹调用shell脚本
1)创建自由风格
2)构建触发器,直接调用shell脚本进行部署代码
gitlab的ci工具
stages: - build - test - deploy job1: stage: test tags: - demo script: - echo "I am job1" - echo "I am in test stage" job2: stage: build tags: - demo script: - echo "I am job2" - echo "I am build stage" job3: stage: deploy tags: - demo script: - echo "I am job3" - echo "I am deploy stage"
标签:git,CICD,gitlab,echo,sh,Jenkins,root,stage From: https://www.cnblogs.com/linu/p/11080777.html