创建GitLab源码项目并上传示例代码
1. 创建GitLab源码项目
本示例中创建的GitLab源码项目地址为:https://gitee.com/SunHarvey/helloworld_java.git
2. 执行以下命令获取示例代码并上传至GitLab
git clone https://gitee.com/SunHarvey/helloworld_java.git git remote add helloworld https://gitee.com/SunHarvey/helloworld_java.git git push helloworld master
在Kubernetes集群中安装GitLab Runner
1. 获取GitLab Runner的注册信息
- 登录你的GitLab。
- 在顶部导航栏中,选择ProjectsYour projects。
- 在Your projects页签下,选择相应的Project。
- 在左侧导航栏中,选择SettingsCI / CD。
- 单击Runners右侧的Expand。
获取URL和registration token, 这个url 和token下边要用到
2. 获取并修改GitLab Runner的Helm Chart
获取gitlab-runner
git clone https://github.com/haoshuwei/gitlab-runner.git
替换values.yaml文件中 gitlabUrl和runnerRegistrationToken字段, 就是上边看到的那个两个字段,
也可以配置全局的runner, 这个就不用每个项目都加了,具体方法请看文章末尾附录
gitlabUrl: http://xx.xx.xx.xx/ runnerRegistrationToken: "xxxxxx"
3 安装GitLab Runner
打包应用
helm package .
Successfully packaged chart and saved it to: /root/gitlab/gitlab-runner/gitlab-runner-0.1.37.tgz
安装应用
helm install --namespace gitlab --name gitlab-runner *.tgz
查看相关的deployment/pod是否成功启动。若成功启动,则可在GitLab上看到注册成功的GitLab Runner
也可在kubernetes上查看
设置全局变量
在GitLab的顶部导航栏中,选择Projects > Your projects。
在Your projects页签下,选择相应的Project。
在左侧导航栏中,选择Settings > CI / CD。
单击Variables右侧的Expand。添加GitLab Runner可用的环境变量。本示例中,添加以下三个变量。
执行以下命令生成KubeConfig的编码字符串:
echo $(cat ~/.kube/config | base64) | tr -d " "
编写.gitlab-ci.yml
编写.gitlab-ci.yml文件,完成 helloworld 源码项目的编译构建、镜像推送和应用部署(可参考hellowrld源码项目中的.gitlab-ci.yml)
image: docker:stable
stages:
- package
- docker_build
- deploy_k8s
variables:
KUBECONFIG: /etc/deploy/config
MAVEN_OPTS: "-Dmaven.repo.local=/opt/cache/.m2/repository"
mvn_build_job:
image: maven:3.6.2-jdk-14
stage: package
tags:
- k8s-runner
script:
- mvn clean install
- cp target/helloworld-1.0.jar /opt/cache/
docker_build_job:
image: docker:latest
stage: docker_build
tags:
- k8s-runner
script:
- docker login -u $REGISTRY_USERNAME -p $REGISTRY_PASSWORD registry-vpc.cn-hongkong.aliyuncs.com
- cp /opt/cache/helloworld-1.0.jar target/helloworld-1.0.jar
- docker build -t registry-vpc.cn-hongkong.aliyuncs.com/YourImageRepo/helloworld:$CI_PIPELINE_ID .
- docker push registry-vpc.cn-hongkong.aliyuncs.com/YourImageRepo/helloworld:$CI_PIPELINE_ID
deploy_k8s_job:
image: registry.cn-hangzhou.aliyuncs.com/haoshuwei24/kubectl:1.16.6
stage: deploy_k8s
tags:
- k8s-runner
script:
- mkdir -p /etc/deploy
- echo $kube_config |base64 -d > $KUBECONFIG
- sed -i "s/IMAGE_TAG/$CI_PIPELINE_ID/g" deployment.yaml
- cat deployment.yaml
- kubectl apply -f deployment.yaml
.gitlab-ci.yml定义了一个Pipeline, 分三个阶段步骤执行
image: docker:stable # Pipeline中各个步骤阶段的构建镜像没有指定时, 默认使用docker:stable镜像
stages:
- package # 源码打包阶段
- docker_build # 镜像构建和打包推送阶段
- deploy_k8s # 应用部署阶段
variables:
KUBECONFIG: /etc/deploy/config # 定义全局变量KUBECONFIG
maven源码打包阶段。
mvn_build_job: # job名称
image: maven:3.6.2-jdk-14 # 本阶段构建使用的构建镜像
stage: package # 关联的阶段名称
tags: # GitLab Runner的tag
- k8s-runner # 指定runner-tag
script:
- mvn clean install # 执行构建脚本
- cp target/helloworld-1.0.jar /opt/cache/ # 构建物保存至缓存区
镜像构建和打包推送阶段
docker_build_job:
image: docker:latest
stage: docker_build
tags:
- k8s-runner
script:
- docker login -u $REGISTRY_USERNAME -p $REGISTRY_PASSWORD registry-vpc.cn-hongkong.aliyuncs.com # 登录镜像仓库
- cp /opt/cache/helloworld-1.0.jar target/helloworld-1.0.jar
- docker build -t registry-vpc.cn-hongkong.aliyuncs.com/YourImageRepo/helloworld:$CI_PIPELINE_ID . # 打包Docker镜像,使用的tag为本次Pipeline的ID
- docker push registry-vpc.cn-hongkong.aliyuncs.com/YourImageRepo/helloworld:$CI_PIPELINE_ID # 推送Docker镜像
应用部署阶段
deploy_k8s_job: # job名称
image: registry.cn-hangzhou.aliyuncs.com/haoshuwei24/kubectl:1.16.6 # 本阶段构建使用的构建镜像
stage: deploy_k8s # 关联的阶段名称
tags:
- k8s-runner # GitLab Runner的tag
script:
- mkdir -p /etc/deploy
- echo $kube_config |base64 -d > $KUBECONFIG # 配置连接Kubernetes集群的config文件
- sed -i "s/IMAGE_TAG/$CI_PIPELINE_ID/g" deployment.yaml # 动态替换部署文件中的镜像tag
- cat deployment.yaml
- kubectl apply -f deployment.yaml
执行Pipeline
提交.gitlab-ci.yml文件后,Project gitlab-java-demo会自动检测到这个文件并执行Pipeline, 如下图所示
访问服务
kubectl -n gitlab get svc
注意事项
1. 取消Auto DevOps
附录:
全局runner 添加
以管理员省份登录gitlab ,进入adminArea --> Overview --> Runners, 就可以看到 url 和token 了。