1.安裝gitlab runner
1.添加GitLab的官方存儲庫:
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
2.安裝最新版本的GitLab Runner
sudo yum install gitlab-runner
3.驗證安裝
gitlab-runner -version
2.註冊gitlab runner
gitlan-runner register
根據提示輸入
url(登陸GitLab->Settings->CI/CD->Runners展開,有url信息,防坑,可能需要把http改成https,否則提示401未授權),
token(登陸GitLab->Settings->CI/CD->Runners展開,複製token即可),
description(自定義),
tags(很關鍵,後面寫.gitlab-ci.yml配置文件時需要指定對應的tags)
3.ecs環境配置
備註:ecs上可能沒有安裝docker,需要自己安裝
1.docker安裝步驟地址如下
http://www.runoob.com/docker/centos-docker-install.html
2.安裝jdk環境變量
vim /etc/profile
JAVA_HOME=/yinjian/java/jdk-11.0.2/
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH
3.安裝maven環境變量
vim /etc/profile
MAVEN_HOME=/yinjian/maven/apache-maven-3.6.0/
export MAVEN_HOME
export PATH=$PATH:$MAVEN_HOME/bin
(1)期間遇到一個問題!!!
修改/etc/profile出錯導致所有命令都command not found的解決辦法
export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/usr/X11R6/bin
因爲基本所有的shell命令都包含在上面幾個目錄中,
執行完後,就可以執行其他命令,趕緊把/etc/profile的錯誤改正過來~~~
然後再
*#立即生效*
source /etc/profile
(2)maven裏settings.xml需要
配置鏡像服務器
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
指定編譯的jdk版本,否則會有問題
<profile>
<id>jdk-11</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>11</jdk>
</activation>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<maven.compiler.compilerVersion>11</maven.compiler.compilerVersion>
</properties>
</profile>
4.項目添加.gitlab-ci.yml文件發佈至gitlab測試
variables:
REPOSITORY: "registry.cn-hangzhou.aliyuncs.com/workbei-project/workbei-ec-engine"
TAG: 1.4.2
DOCKER_USERNAME: xxx
DOCKER_PASSWORD: xxx
stages:
- package
- build-and-push
- deploy
#maven打成war包
maven-package:
stage: package
tags:
- workbei-ec-engine
only:
- dev
script:
- mvn package -B -DskipTests
artifacts:
paths:
- ec-web-main/target/workbeiurl.war
#docker構建鏡像and上傳鏡像
docker-build-and-push:
stage: build-and-push
tags:
- workbei-ec-engine
only:
- dev
script:
- sudo docker login --username=$DOCKER_USERNAME --password=$DOCKER_PASSWORD registry.cn-hangzhou.aliyuncs.com
- sudo docker build -t workbei-ec-engine:$TAG .
- sudo docker tag workbei-ec-engine:$TAG $REPOSITORY:$TAG
- sudo docker push $REPOSITORY:$TAG
#部署到K8S集羣並更新
k8s-deploy:
stage: deploy
tags:
- workbei-ec-engine
only:
- dev
script:
- echo "k8s-deploy-start"
坑:
sudo docker login權限不夠
是因爲默認構建的時候是gitlab-runner 這個用戶 去執行這個命令的
所以要爲gitlab-runner 用戶提權
chmod +x /etc/sudoers
vim /etc/sudoers
root那塊添加如下內容
gitlab-runner ALL=(ALL) NOPASSWD:ALL
如果順利,現在已經成功push到遠程倉庫了,下一步是k8s集羣拉取更新鏡像!
5.kubectl安裝
解壓
tar -zxvf kubernetes-client-linux-amd64.tar.gz
進入目錄
cd kubernetes/client/bin
把kubectl賦權可執行命令
chmod +x ./kubectl
把kubectl拷貝到環境變量中去
sudo mv ./kubectl /usr/local/bin/kubectl
阿里雲->容器服務->選擇集羣->內網訪問即可
成功後輸入命令查看最後整合效果
kubectl config view
6.完善.gitlab-ci.yml配置文件添加deploy步驟
k8s-deploy:
stage: deploy
tags:
- workbei-ec-engine
only:
- dev
script:
- sudo kubectl set image deployment workbei-ec-engine-deploy workbei-ec-engine=registry-vpc.cn-hangzhou.aliyuncs.com/workbei-project/workbei-ec-engine:$TAG --namespace=dingtalk-auth
更新鏡像,等待,查看結果即可
7.最終版本
當時考慮多個job之間需要協調一個war包,選擇artifacts上傳到gitlab,但後面發現會特別耗時!最終選擇把package和build and push放到一個job裏。
variables:
REPOSITORY: registry-vpc.cn-hangzhou.aliyuncs.com/workbei-project/workbei-ec-engine
TAG: 1.4.3
DOCKER_USERNAME: dingclouduser@1403209023012938
DOCKER_PASSWORD: Create640321
stages:
- package-build-push
- deploy
#maven打成war包
maven-package:
stage: package-build-push
tags:
- workbei-ec-engine
only:
- dev
script:
- mvn package -B -DskipTests
- sudo docker login --username=$DOCKER_USERNAME --password=$DOCKER_PASSWORD registry-vpc.cn-hangzhou.aliyuncs.com
- sudo docker build -t workbei-ec-engine:$TAG .
- sudo docker tag workbei-ec-engine:$TAG $REPOSITORY:$TAG
- sudo docker push $REPOSITORY:$TAG
#artifacts:
#expire_in: 60 mins
#paths:
#- ec-web-main/target/workbeiurl.war
#部署到K8S集羣並更新
k8s-deploy:
stage: deploy
tags:
- workbei-ec-engine
only:
- dev
#dependencies: []
script:
- /usr/local/bin/kubectl config use-context 211484640430774345-c5b80bf3faeea4ce3a7ca65809e5601b9
- /usr/local/bin/kubectl set image deployment workbei-ec-engine-deploy workbei-ec-engine=$REPOSITORY:$TAG --namespace=dingtalk-auth
學習Linux命令
Linux which命令用於查找文件。which指令會在環境變量$PATH設置的目錄裏查找符合條件的文件。
which java
切換用戶
su gitlab-runner
複製文件
cp /root/.kube/config /home/gitlab-runner/.kube/config
修改文件夾或者文件擁有者和擁有組
chown gitlab-runner config
chgrp gitlab-runner config
查看文件(包含隱藏文件)
ll -a