国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

devops-5:從0開始構(gòu)建一條完成的CI CD流水線

這篇具有很好參考價(jià)值的文章主要介紹了devops-5:從0開始構(gòu)建一條完成的CI CD流水線。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

從0開始構(gòu)建一條完成的CI CD流水線

前文中已經(jīng)講述了靜態(tài)、動(dòng)態(tài)增加agent節(jié)點(diǎn),以動(dòng)態(tài)的k8s cloud為例,下面就以Maven構(gòu)建Java程序?yàn)槔?,開始構(gòu)建出一條完整的CI CD流水線。
實(shí)現(xiàn)功能目標(biāo):
 1.分別可以根據(jù)分支和tag從源碼倉(cāng)庫(kù)clone代碼
 2.拿到源碼后開始編譯
 3.構(gòu)建image,并push到鏡像倉(cāng)庫(kù)
 4.部署到對(duì)應(yīng)k8s集群
 5.部署成功后,釘釘告警
以上是此pipeline實(shí)現(xiàn)的功能,后續(xù)計(jì)劃:
 1.通過(guò)webhooks實(shí)現(xiàn)源碼倉(cāng)庫(kù)push代碼后,自動(dòng)出發(fā)pipeline運(yùn)行
 2.增加SonarQube代碼質(zhì)量檢測(cè)步驟
 3.配合argoCD實(shí)現(xiàn)自動(dòng)CD
?
后續(xù)文章會(huì)陸續(xù)更新,敬請(qǐng)期待。
鏡像準(zhǔn)備
以k8s cloud當(dāng)做agent的話,肯定需要一個(gè)基礎(chǔ)鏡像,鏡像中需要有g(shù)it、java和maven這些必要的工具環(huán)境,當(dāng)然,可以使用jenkins提供的tools功能來(lái)配置工具導(dǎo)入到環(huán)境中,例如:
    tools {
        maven 'apache-maven-3.8.6' 
    }
這種方式是比較方便的,但是每到一個(gè)新宿主機(jī)都要去主動(dòng)下載一遍,還需要在jenkins中配置下載地址和方式,遷移時(shí)也比較麻煩,所以這里就采用一勞永逸的方法,把這些環(huán)境都提前打包到agent的鏡像中,方便以后使用。
這里選用的基礎(chǔ)鏡像是jenkins官方的agent鏡像:
docker pull jenkins/agent:latest
這個(gè)官方鏡像內(nèi)已經(jīng)包含git、java環(huán)境,以及后邊需要和jenkins master建立連接的agent.jar包,所以我們只需再將maven包打包進(jìn)去即可。
?
maven工具包的準(zhǔn)備
官方下載maven包:
wget https://dlcdn.apache.org/maven/maven-3/3.8.6/binaries/apache-maven-3.8.6-bin.tar.gz
?
maven的配置(可選)
很多java程序會(huì)用maven來(lái)進(jìn)行構(gòu)建,maven中又存在很多依賴組件(常用的是jar包、war包、pom等,也可把Zip包等通過(guò)POM文件定義為依賴組件),這個(gè)時(shí)候就會(huì)有一個(gè)倉(cāng)庫(kù)的概念,這個(gè)倉(cāng)庫(kù)分為三種類型,即:
  1. central:中央倉(cāng)庫(kù),是由Maven社區(qū)提供的資源倉(cāng)庫(kù),它包含了大量的常用程序庫(kù)組件(jar包)。默認(rèn)Maven的中央倉(cāng)庫(kù)地址為:http://repo1.maven.org/maven2/
  2. local:本地倉(cāng)庫(kù),是存放maven環(huán)境本地的一個(gè)文件夾,此文件夾在第一次運(yùn)行Maven命令時(shí)就創(chuàng)建了。Maven在執(zhí)行構(gòu)建任務(wù)時(shí),根據(jù)依賴關(guān)系從中心倉(cāng)庫(kù)、或遠(yuǎn)程倉(cāng)庫(kù)下載依賴組件到本地倉(cāng)庫(kù),然后本地倉(cāng)庫(kù)的內(nèi)容供項(xiàng)目引用。
  3. remote:遠(yuǎn)程倉(cāng)庫(kù),例如項(xiàng)目需要指定外部其他公司、或開源組織的jar包,這些依賴組件通用性等原因,未納入Maven中央倉(cāng)庫(kù),這個(gè)時(shí)候就要手動(dòng)指定一個(gè)私有的遠(yuǎn)程倉(cāng)庫(kù)來(lái)拉取依賴。
修改Maven中央倉(cāng)庫(kù)地址
一般Maven的中央倉(cāng)庫(kù)由于網(wǎng)絡(luò)問(wèn)題會(huì)訪問(wèn)不到,這個(gè)時(shí)候可以修改地址為國(guó)內(nèi)的Maven倉(cāng)庫(kù)地址或者公司私有的倉(cāng)庫(kù)地址,例如阿里的:http://maven.aliyun.com/nexus/content/groups/public
修改步驟是要修改apache-maven-3.8.6/conf/settings.xml文件中以下字段:
devops-5:從0開始構(gòu)建一條完成的CI CD流水線
修改為:
    <mirror>
      <id>nexus-aliyun</id>
      <mirrorOf>central</mirrorOf>
      <name>Nexus aliyun</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>
若修改后未生效,可以檢查代碼pom.xml中是否指定了倉(cāng)庫(kù)地址,類似語(yǔ)句:
<repositories>
    <repository>
        <id>springsource-repos</id>
        <name>SpringSource Repository</name>
        <url>http://repo.spring.io/release/</url>
    </repository>
</repositories>
修改Maven本地倉(cāng)庫(kù)路徑
Maven本地倉(cāng)庫(kù)路徑默認(rèn)為 ${user.home}/.m2/repository
devops-5:從0開始構(gòu)建一條完成的CI CD流水線
可以直接在此進(jìn)行修改,也可以在構(gòu)建時(shí)用參數(shù)指定:
mvn clean install -Dmaven.repo.local=/home/maven/local_repo/
也可以在構(gòu)建時(shí)指定配置文件地址:
mvn clean install -s /home/maven/settings.xml
開始構(gòu)建鏡像
準(zhǔn)備好的物料包及Dockerfile:
[root@node01 agent-jenkins]# ls
apache-maven-3.8.6.tar.gz  Dockerfile  jenkins-agent kubectl.tar.gz
這里要說(shuō)下jenkins-agent這個(gè)腳本文件,這個(gè)腳本文件也是官方提供的,源碼文件在這里:https://github.com/jenkinsci/docker-inbound-agent,這是專門用來(lái)agent連接jenkins master的,采用的jnlp的方式。
?
查看Dockerfile內(nèi)容
[root@node01 agent-jenkins]# cat Dockerfile 
FROM jenkins/agent:latest

USER root

ADD apache-maven-3.8.6.tar.gz /opt/
ADD kubectl.tar.gz /usr/local/bin/
ENV PATH $PATH:/opt/apache-maven-3.8.6/bin/
COPY jenkins-agent /usr/local/bin/
CMD ["/bin/sh","-c","/usr/local/bin/jenkins-agent"]
用于CD環(huán)節(jié)的工具,這里添加了kubectl命令,可根據(jù)需要添加。
?
構(gòu)建鏡像
# docker build -t registry.example.com:5000/jenkins/agent:v1 .
# docker push registry.example.com:5000/jenkins/agent:v1
registry.example.com:5000 是我的私有倉(cāng)庫(kù)
?
配置k8s cloud的pod Template
前邊鏡像準(zhǔn)備完畢,下邊要準(zhǔn)備一個(gè)pod yaml模板,來(lái)運(yùn)行每次臨時(shí)加入和運(yùn)行job的agent,默認(rèn)情況下,k8s cloud會(huì)有一個(gè)名稱為jnlp的容器專門來(lái)和jenkins master連接,然后我們可以再啟動(dòng)一個(gè)容器專門來(lái)跑Pipeline的job,但這里有一點(diǎn)要注意,如果pod中有多個(gè)容器,我們需要在Pipeline中指定某個(gè)在哪個(gè)容器中運(yùn)行,這個(gè)具體怎么指定后邊再說(shuō),我們這里采用覆蓋截jnlp容器的方式來(lái)實(shí)現(xiàn)全部的工作都由一個(gè)container來(lái)完成,最終pod Template如下:
apiVersion: "v1"
kind: "Pod"
metadata:
  name: jenkins-agent
  namespace: "default"
spec:
  containers:
  - env:
    - name: "MAVEN_HOME"
      value: "/opt/apache-maven-3.8.6/"
    image: "registry.example.com:5000/jenkins/agent:v1"
    imagePullPolicy: "IfNotPresent"
    name: "jnlp"
    resources:
      limits:
        memory: "2G"
        cpu: "1500m"
      requests:
        memory: "1G"
        cpu: "100m"
    volumeMounts:
    - mountPath: "/root/.m2"
      name: "m2"
      readOnly: false
    - mountPath: "/home/jenkins/agent"
      name: "workspace-volume"
      readOnly: false
    - mountPath: "/usr/bin/docker"
      name: "docker-client"
      readOnly: true
    - mountPath: "/var/run/docker.sock"
      name: "docker-engine"
      readOnly: true
  volumes:
  - hostPath:
      path: "/root/.m2"
      type: "DirectoryOrCreate"
    name: "m2"
  - hostPath:
      path: "/home/jenkins"
    name: "workspace-volume"
  - hostPath:
      path: "/usr/bin/docker"
      type: File
    name: "docker-client"
  - hostPath:
      path: "/var/run/docker.sock"
      type: Socket
    name: "docker-engine"
這里有四個(gè)volume:
  • m2:這個(gè)是用作maven的本地倉(cāng)庫(kù)路徑,使用hostpath掛載到了本地目錄,當(dāng)然也可以存儲(chǔ)到某些共享存儲(chǔ)中,目的就是讓依賴包只下載一次。
  • workspace-volume:這個(gè)是將jenkins的工作目錄也使用hostpath掛載。
  • docker-client:docker命令的掛載,用于build、push等命令
  • docker-engine:docker engine的掛載,用于build、push等
?
gitlab項(xiàng)目克隆
simple-java-maven-app項(xiàng)目地址:https://github.com/jenkins-docs/simple-java-maven-app,將此項(xiàng)目克隆到本地gitlab即可。
網(wǎng)訪問(wèn)github慢的話,可以git我的碼云:https://gitee.com/vfancloud/simple-java-maven-app.git
?
Pipeline編寫
創(chuàng)建憑證
1.代碼倉(cāng)庫(kù)我們使用前邊搭建的gitlab,需要提前將gitlab的用戶憑證在Jenkins創(chuàng)建好,方便后邊Jenkins下載代碼使用:
系統(tǒng)管理—>憑證管理—>創(chuàng)建Username with password類型憑證(id需要記住,Pipeline中會(huì)使用)
devops-5:從0開始構(gòu)建一條完成的CI CD流水線
?
2.我們的服務(wù)是部署在k8s集群中,所以還需要目標(biāo)k8s的kubeconfig憑證,用來(lái)管理操控目標(biāo)k8s:
系統(tǒng)管理—>憑證管理—>創(chuàng)建Secret file類型憑證
devops-5:從0開始構(gòu)建一條完成的CI CD流水線
一般項(xiàng)目都會(huì)有多個(gè)環(huán)境,所以每個(gè)環(huán)境的kubeconfig憑證都要提前創(chuàng)建好。
?
3.鏡像倉(cāng)庫(kù)的賬號(hào)密碼也要提前準(zhǔn)備好,Username with password類型即可。
devops-5:從0開始構(gòu)建一條完成的CI CD流水線
安裝插件
一些常用的必須插件,要提前安裝:
  1. Git
  2. Git Parameter
  3. DingTalk
  4. build user vars plugin
Pipeline
此Pipeline起一個(gè)示例效果,有些功能點(diǎn)可以省略或者選擇使用,酌情增刪即可:
pipeline {
    agent {
      kubernetes {
        cloud 'kubernetes-internal'  //指定cloud name
        inheritFrom 'jenkins-agent'  //指定podTemplate,新版本已經(jīng)不再用label指定
        namespace 'default'
      }
    }
    environment {
        GIT_CERT = credentials('vfan-gitlab')  //gitlab用戶憑證
        HARBOR_HOST = 'registry.example.com:5000'
        SERVER_NAME = 'simple-java-maven-app'
    }
/*    tools {
        maven 'apache-maven-3.8.6' 鏡像有maven環(huán)境了,可以不指定
    } */   
    options {
        buildDiscarder(logRotator(numToKeepStr: '10'))  //保持歷史構(gòu)建的最大個(gè)數(shù)
        timeout(20)  //默認(rèn)單位分鐘,20分鐘
        timestamps()  //Pipeline開始時(shí)間以及每個(gè)step執(zhí)行開始時(shí)間
    }
    parameters {
        choice(
            name: 'GIT_REPO_URL',
            choices: 'http://10.85.122.128:880/vfan/simple-java-maven-app.git',
            description: 'Git Repo example environment'
        )
        choice(
            name: 'GIT_TYPE',
            choices: ['branch', 'tag'],
            description: 'Git Repo example brance'
        )
        choice(
            name: 'GIT_REPO_BRANCE',
            choices: ['master', 'dev', 'test'],
            description: 'Git Repo example brance'
        )
        gitParameter name: 'GIT_TAG',
            type: 'PT_TAG',
            branch: 'master',
            branchFilter: '.*',
            defaultValue: '',
            selectedValue: 'TOP',
            sortMode: 'DESCENDING_SMART',
            listSize: '1',
                description: 'Select you git tag.'
        choice(
            name: 'ENVIRONMENT', 
            choices: ['INT', 'DEV', 'PROD'], 
            description: 'Select deployment environment'
        )
    }
    stages {
        stage('git clone branch') {
            when {
                 expression { params.GIT_TYPE == "branch" }
            }
            steps {
                git(
                    branch: params.GIT_REPO_BRANCE, 
                    credentialsId: env.GIT_CERT, 
                    url: params.GIT_REPO_URL
                )
            }
            post {
                success {
                    sh '''
                    echo "use branch build"
                    git status
                    '''
                }
            }
        }
        stage('git clone tag') {
            when {
                 expression { params.GIT_TYPE == "tag" }
            }
            steps {
              checkout([$class: 'GitSCM', 
              branches: [[name: "${GIT_TAG}"]], 
              userRemoteConfigs: [[credentialsId: env.GIT_CERT, url: params.GIT_REPO_URL]]])
            }
            post {
                success {
                    sh '''
                    echo "use tag build"
                    git status
                    '''
                }
            }
        }
        stage('Maven Build') {
            steps {
                sh 'mvn -B -DskipTests clean package'
            }
        }
        stage('Test') {
            steps {
                sh 'mvn test'
            }
            post {
                always {
                    junit 'target/surefire-reports/*.xml'
                }
            }
        }
        stage('Deliver') {
            steps {
                sh './jenkins/scripts/deliver.sh'
            }
        }
        stage('Docker build && push') {
            steps {
                withCredentials([usernamePassword(credentialsId: 'harbor-auth', passwordVariable: 'HARBOR_PASSWD', usernameVariable: 'HARBOR_USER')]) {
                    sh '''
                        echo "Other operations..."
                        echo "Start building..."
                        date -d "+8 hour" +%Y%m%d_%H%M%S > /tmp/date
                        BUILD_TIME=`cat /tmp/date`
                        docker build --build-arg APP_NAME=simple-java-maven-app -t ${HARBOR_HOST}/${SERVER_NAME}:${GIT_REPO_BRANCE}_${BUILD_TIME} .
                        echo "Build complete."
                        docker login $HARBOR_HOST -u $HARBOR_USER -p $HARBOR_PASSWD
                        docker push ${HARBOR_HOST}/${SERVER_NAME}:${GIT_REPO_BRANCE}_${BUILD_TIME}
                        docker rmi ${HARBOR_HOST}/${SERVER_NAME}:${GIT_REPO_BRANCE}_${BUILD_TIME}
                    '''
                }
            }
        }
        stage('Deploy to k8s'){
            input{
                message "Should we continue deploy?"
                ok "Yes, we should."

            }
            environment {
                // 提前創(chuàng)建好secret file類型的憑據(jù)
                KUBE_CONFIG_INT = credentials('mycluster_int')
                // KUBE_CONFIG_DEV = credentials('mycluster_dev')
                // KUBE_CONFIG_PROD = credentials('mycluster_prod')
            }
            steps{
                sh'''
                    BUILD_TIME=`cat /tmp/date`
                    case $ENVIRONMENT in
                        "INT")
                            kubectl set image deployment ${SERVER_NAME} --kubeconfig=${KUBE_CONFIG_INT} app=${HARBOR_HOST}/${SERVER_NAME}:${GIT_REPO_BRANCE}_${BUILD_TIME}
                            kubectl rollout status deployment ${SERVER_NAME} --kubeconfig=${KUBE_CONFIG_INT}
                        ;;
                        "DEV")
                            kubectl set image deployment ${SERVER_NAME} --kubeconfig=${KUBE_CONFIG_DEV} app=${HARBOR_HOST}/${SERVER_NAME}:${GIT_REPO_BRANCE}_${BUILD_TIME}
                            kubectl rollout status deployment ${SERVER_NAME} --kubeconfig=${KUBE_CONFIG_DEV}
                        ;;
                    esac
                    echo "Deployment complete."
                '''
            }
        }
    }
    post { 
        success{ 
            echo 'Deployment succeeded.'
            dingtalk (
                robot: 'myapp-dingding-robot',
                type: 'MARKDOWN',  // 發(fā)什么類型的消息,有TEXT、LINK、MARKDOWN、和ACTION_CARD,參考https://jenkinsci.github.io/dingtalk-plugin/guide/pipeline.html
                at: [],
                atAll: false,
                title: 'Jenkins發(fā)版成功',
                text: [
                    "## 構(gòu)建結(jié)果:**${currentBuild.result}**",
                    '---',
                    "## 構(gòu)建信息",
                    '---',
                    "- 項(xiàng)目名稱:${SERVER_NAME}",
                    "- 構(gòu)建環(huán)境:${ENVIRONMENT}",
                    "- 構(gòu)建分支:${GIT_REPO_BRANCE}",
                    "- 構(gòu)建標(biāo)簽:${GIT_TAG}",
                    "- 項(xiàng)目地址:${GIT_REPO_URL}",
                    "- 構(gòu)建用戶:${env.BUILD_USER}"
                    ],
            //    messageUrl: '',
            //    picUrl: '',
            //    singleTitle: '',
            //    btns: [],
            //    btnLayout: '', 
            //    hideAvatar: false
            )
        }
        failure{
            echo "Deployment failed."
            dingtalk (
                robot: 'myapp-dingding-robot',
                type: 'MARKDOWN',  // 發(fā)什么類型的消息,有TEXT、LINK、MARKDOWN、和ACTION_CARD,參考https://jenkinsci.github.io/dingtalk-plugin/guide/pipeline.html
                at: [],
                atAll: false,
                title: 'Jenkins發(fā)版失敗',
                text: [
                    "## 構(gòu)建結(jié)果:**${currentBuild.result}**",
                    '---',
                    "## 構(gòu)建信息",
                    '---',
                    "- 項(xiàng)目名稱:${SERVER_NAME}",
                    "- 構(gòu)建環(huán)境:${ENVIRONMENT}",
                    "- 構(gòu)建分支:${GIT_REPO_BRANCE}",
                    "- 構(gòu)建標(biāo)簽:${GIT_TAG}",
                    "- 項(xiàng)目地址:${GIT_REPO_URL}",
                    "- 構(gòu)建用戶:${env.BUILD_USER}"
                    ],
            //    messageUrl: '',
            //    picUrl: '',
            //    singleTitle: '',
            //    btns: [],
            //    btnLayout: '', 
            //    hideAvatar: false
            )
        }
    }
}

?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-419448.html

測(cè)試運(yùn)行Pipeline
devops-5:從0開始構(gòu)建一條完成的CI CD流水線
運(yùn)行完成,釘釘也已收到通知,后續(xù)更新更多內(nèi)容。

到了這里,關(guān)于devops-5:從0開始構(gòu)建一條完成的CI CD流水線的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • CI/CD流水線插件在服務(wù)質(zhì)量看護(hù)中的實(shí)踐

    CI/CD 是一種通過(guò)在應(yīng)用開發(fā)階段引入自動(dòng)化來(lái)頻繁向客戶交付應(yīng)用的方法。CI/CD 的核心概念是持續(xù)集成、持續(xù)交付和持續(xù)部署。 作為一種面向開發(fā)和運(yùn)維團(tuán)隊(duì)的解決方案,CI/CD 主要針對(duì)在集成新代碼時(shí)所引發(fā)的問(wèn)題(亦稱:“集成地獄”)。 具體而言,CI/CD 可讓持續(xù)自動(dòng)化

    2024年01月23日
    瀏覽(39)
  • CI/CD---使用新版云效流水線自動(dòng)部署Java項(xiàng)目

    CI/CD---使用新版云效流水線自動(dòng)部署Java項(xiàng)目

    兩大基本前提: 1、有一個(gè)自己的云服務(wù)器 2、項(xiàng)目代碼已經(jīng)提交到代碼倉(cāng)庫(kù),如gitee,github等 為什么需要流水線 1、除了第一次需要新建流水線,配置腳本外,后續(xù)所有的部署只需要提交代碼后,點(diǎn)擊運(yùn)行流水線就行 。 2、流水線還可以回滾,此功能太過(guò)友好了。 3、當(dāng)然,

    2024年02月06日
    瀏覽(40)
  • 在 CI/CD流水線中運(yùn)行自動(dòng)化單元測(cè)試的4個(gè)原因

    目錄 什么是單元測(cè)試? C#中的單元測(cè)試示例 我需要在CI/CD 流水線中運(yùn)行自動(dòng)化測(cè)試嗎? 開發(fā)人員代碼驗(yàn)證反饋循環(huán) 預(yù)驗(yàn)證 步步為營(yíng) 減少“另一個(gè)開發(fā)人員寫了這段代碼”的問(wèn)題 單元測(cè)試 什么是單元測(cè)試? 單元測(cè)試是一小段代碼,用于測(cè)試應(yīng)用程序編寫的代碼的邏輯。單

    2024年02月16日
    瀏覽(49)
  • 你以為搞個(gè)流水線每天跑,團(tuán)隊(duì)就在使用CI/CD實(shí)踐了?

    你以為搞個(gè)流水線每天跑,團(tuán)隊(duì)就在使用CI/CD實(shí)踐了?

    在實(shí)踐中,很多團(tuán)隊(duì)對(duì)于DevOps 流水線沒有很透徹的理解,要不就創(chuàng)建一大堆流水線,要不就一個(gè)流水線通吃。實(shí)際上,流水線的設(shè)計(jì)和寫代碼一樣,需要基于“業(yè)務(wù)場(chǎng)景”進(jìn)行一定的設(shè)計(jì)編排,特別是很多通過(guò)“開源工具”搭建的流水線,更需要如此(商業(yè)的一體化平臺(tái)大部

    2024年02月08日
    瀏覽(41)
  • Azure DevOps構(gòu)建CICD流水線

    Azure DevOps構(gòu)建CICD流水線

    Azure AKS Azure CR Azure DevOps .NET Core示例 Dockerfile deploy.yaml Java示例 Dockerfile deploy.yaml 注冊(cè)Azure AD應(yīng)用 打開Azure portal,導(dǎo)航到Azure AD 選擇應(yīng)用注冊(cè),點(diǎn)擊新注冊(cè) 輸入應(yīng)用名稱,點(diǎn)擊注冊(cè) 創(chuàng)建客戶端密碼 分配應(yīng)用訂閱的參與者角色 導(dǎo)航到訂閱,選擇Access control(IAM),點(diǎn)擊添加按鈕,

    2024年02月09日
    瀏覽(36)
  • (十六)devops持續(xù)集成開發(fā)——jenkins流水線構(gòu)建之郵件通知

    (十六)devops持續(xù)集成開發(fā)——jenkins流水線構(gòu)建之郵件通知

    本節(jié)內(nèi)容主要介紹jenkins在流水線任務(wù)構(gòu)建完成后的通知操作,使用jenkins的郵件通知插件完成構(gòu)建任務(wù)結(jié)束的通知。一般項(xiàng)目發(fā)布都會(huì)通知相關(guān)的責(zé)任人,這樣項(xiàng)目發(fā)布在出現(xiàn)問(wèn)題時(shí)能夠及時(shí)的處理。 ①在插件中心安裝Email Extension郵件通知插件 ②申請(qǐng)一個(gè)發(fā)送郵件的郵箱服務(wù)

    2024年02月21日
    瀏覽(39)
  • (十五)devops持續(xù)集成開發(fā)——jenkins流水線構(gòu)建策略配置及觸發(fā)器的使用

    (十五)devops持續(xù)集成開發(fā)——jenkins流水線構(gòu)建策略配置及觸發(fā)器的使用

    本節(jié)內(nèi)容我們主要介紹在Jenkins流水線中,其構(gòu)建過(guò)程中的一些構(gòu)建策略的配置,例如通過(guò)遠(yuǎn)程http構(gòu)建、定時(shí)任務(wù)構(gòu)建、輪詢SCM構(gòu)建、參數(shù)化構(gòu)建、Git hook鉤子觸發(fā)構(gòu)建等,可根據(jù)不同的需求完成不同構(gòu)建策略的配置。 - 構(gòu)建策略說(shuō)明: - 測(cè)試驗(yàn)證 - 構(gòu)建說(shuō)明 - 測(cè)試驗(yàn)證 - 配置

    2024年02月21日
    瀏覽(39)
  • 【jenkins】jenkins流水線構(gòu)建打包jar,生成docker鏡像,重啟docker服務(wù)的過(guò)程,在jenkins上一鍵完成,實(shí)現(xiàn)提交代碼自動(dòng)構(gòu)建的功能

    【jenkins】jenkins流水線構(gòu)建打包jar,生成docker鏡像,重啟docker服務(wù)的過(guò)程,在jenkins上一鍵完成,實(shí)現(xiàn)提交代碼自動(dòng)構(gòu)建的功能

    ?【jenkins】jenkins流水線構(gòu)建打包jar,生成docker鏡像,重啟docker服務(wù)的過(guò)程,在jenkins上一鍵完成,實(shí)現(xiàn)提交代碼自動(dòng)構(gòu)建,服務(wù)重啟,服務(wù)發(fā)布的功能。一鍵實(shí)現(xiàn)。非常的舒服。 這是 shell腳本? 腳本名稱: startup.sh ? 本腳本的功能是在jenkins 構(gòu)建完項(xiàng)目后,通過(guò)jar包生成dock

    2024年02月11日
    瀏覽(97)
  • [Gitlab CI] 自動(dòng)取消舊流水線

    [Gitlab CI] 自動(dòng)取消舊流水線

    當(dāng)某一分支開啟 Merge Request 后只要提交一次 commit 就會(huì)自動(dòng)創(chuàng)建一個(gè)新的流水線,此時(shí)之前的 Pipeline 不會(huì)被取消,經(jīng)過(guò)下面的設(shè)置后可以實(shí)現(xiàn)自動(dòng)取消舊流水線的功能。 ??通過(guò)提交(commit)觸發(fā)的同一分支流水線可以自動(dòng)冗余取消,但是通過(guò)手動(dòng)觸發(fā)的同一分支流水線不會(huì)

    2024年03月12日
    瀏覽(36)
  • CI-持續(xù)集成 — 軟件工業(yè)“流水線”技術(shù)實(shí)現(xiàn)

    CI-持續(xù)集成 — 軟件工業(yè)“流水線”技術(shù)實(shí)現(xiàn)

    持續(xù)集成(Continuous Integration)是一種軟件開發(fā)實(shí)踐。在本系列文章的前一章節(jié)已經(jīng)對(duì)其背景及理論體系進(jìn)行了介紹。本小節(jié)則承接前面提出的理論構(gòu)想進(jìn)行具體的技術(shù)實(shí)現(xiàn)。 《Google軟件測(cè)試之道》: \\\"每天,Google都要測(cè)試和發(fā)布數(shù)百萬(wàn)個(gè)源文件,億萬(wàn)行代碼。數(shù)以億計(jì)的構(gòu)建

    2024年02月12日
    瀏覽(41)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包