Jenkins와의 지속적인 통합 및 배포
그래서 이렇게...
우선, 젠킨스는 도대체 무엇입니까?
Jenkins는 자동화된 소프트웨어의 구축, 테스트, 배치를 자동화하여 사용자가 쉽게 지속적인 통합과 지속적인 배치를 할 수 있도록 하는 소스 자동화 도구이다.
본질적으로, 이것은 Jenkins(그리고 많은 다른 도구)가 소프트웨어 변경이 준비되었을 때, 즉시 소프트웨어 변경을 배치하거나 사용자에게 제공하는 과정을 자동화할 수 있음을 의미한다.PR을 마스터(또는main)에 통합할 때 사용자가 업데이트된 사이트의 편의성을 볼 수 있다고 상상해 보세요.😌.
왜 젠킨스야?
선결 조건
1단계 - 노드 응용 프로그램에 대한 GitHub 저장소 만들기
Login to your GitHub account and create a new repository. You can give it a name of your choice, I will name mine jenkins-test. You can initialize with README and .gitignore for Node. Also, make sure your repository is set to public.
2단계 - 간단한 노드 어플리케이션을 생성하여 GitHub로 전송
After creating the repository, clone the repository to your local machine using the following command:
git clone <repository_url>
Make sure to change the repository_url
with yours.
To create a package.json file, open up your terminal and cd
into your project folder, then run npm init
and follow the prompt. I’ve added a screenshot to see the CLI interaction below.
패키지의 스크립트 블록에서 내용을 제거하거나 수정할 수 있습니다.json 파일과 다음 항목을 추가하여 응용 프로그램을 시작하고 테스트합니다.
"start": "node index.js",
"test": "jest"
예시 노드 프로그램에서express를 사용하기 때문에 터미널에서 다음 명령을 계속 실행하여 설치합니다.npm install express
다음에 색인을 만듭니다.js 파일은 우리의 노드 프로그램의 입구점으로 다음 줄을 추가합니다.const express = require("express");
const app = express();
app.get("/", (req, res) => {
res.status(200).json("Hello world");
});
module.exports = app.listen(process.env.PORT || 4000, () =>
console.log(`Running on http://localhost:4000`)
);
브라우저에서 실행npm start
하고 방문http://localhost:4000/하여 노드 프로그램을 보면 브라우저에 Helloworld가 표시됩니다.다음에, 우리는 응용 프로그램에 몇 가지 테스트를 추가할 것이다. 왜냐하면, CI를 사용하면, 우리는 테스트를 사용할 수 있도록 확보하고, 통합 변경 전에 테스트를 통과해야 한다.
따라서 터미널로 돌아가서 프로젝트의 루트 디렉터리에 있는지 확인하고 다음 명령을 사용하여jest와supertest 패키지를 설치합니다.
npm install --save-dev jest supertest
다음에 프로젝트의 루트 디렉터리에 폴더를 만들고 test;(밑줄 두 개, 앞뒤 두 개)이라고 명명합니다.이 test 폴더에 색인을 생성합니다.테스트js 파일을 만들고 최소한 다음 코드를 추가합니다. (항상 테스트를 전면적으로 할 수 있습니다.)const request = require("supertest");
const app = require("../index");
describe("Get route", () => {
it("page should return hello world", async (done) => {
const res = await request(app).get("/");
expect(res.statusCode).toEqual(200);
expect(res.body).toEqual("Hello world");
done();
});
});
afterAll(async () => {
await app.close();
});
터미널에서 npm test
또는 npm run test
를 실행하면 다음과 같은 테스트를 통과할 수 있습니다.현재 저희 코드가 실행 중입니다. 테스트가 통과되고 있습니다. 변경 사항을 제출하고 GitHub로 전송할 수 있습니다.
git add .
git commit -m “initial commit”
git push
3단계 - Heroku 응용 프로그램을 만들어 배치
Log in to your Heroku dashboard.
Look to the upper right and click on New.
Select Create new app.
Add an App name of your choice and Choose a region close to you.
Click Create app.
프로젝트 터미널로 돌아가 Heroku CLI를 사용하여 Heroku에 로그인합니다.Heroku CLI가 설치되어 있지 않으면 다음 단계article를 수행합니다.
그런 다음 다음, 다음을 사용하여 로컬 저장소에 원격 저장소를 추가합니다.
heroku git:remote -a heroku-app-name
그런 다음 다음 다음 명령을 사용하여 코드를 밀어넣습니다.git push heroku <github-branch-name>
이렇게 하는 것은 자동화되기 전에 모든 것이 정상적임을 확보하기 위해서이다.Heroku 프로그램 대시보드에 있는 오픈 앱을 누르면 정상적으로 작동하는지 확인할 수 있습니다.4단계 - Jenkins 설치
Open a new terminal and login to your server with a non-root user account.
ssh username@droplet_ip_address
With this, we can update the kernel with the following command:
sudo apt-get update
Run the following command to install java runtime:
sudo apt-get install default-jre
sudo apt-get install default-jdk
Run following commands one after the other to install Jenkins.
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > \
/etc/apt/sources.list.d/jenkins.list'
sudo apt-get update
sudo apt-get install jenkins
Now, that Jenkins and its dependencies are installed, we can start it using:
sudo systemctl start jenkins
You can verify if Jenkins started successfully using:
sudo systemctl status jenkins
It should show active:
Jenkins가 8080 포트에서 실행되고 있는 이상 ufw로 엽니다.
sudo ufw allow 8080
다음과 같은 방법으로 ufw 상태를 확인할 수 있습니다.sudo ufw status
지금 http://ip_address:8080에 방문하여 Jenkins를 설정하면 Jenkins 화면의 잠금 해제를 볼 수 있습니다.Jenkins의 잠금을 해제하려면 터미널로 돌아가서 다음 명령을 입력하여 암호를 표시합니다.
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
암호를 복사하여 관리자 암호 필드에 붙여넣습니다.다음 화면에는 Customize Jenkins가 표시되며 권장 플러그인 설치를 클릭합니다.
설치가 완료되면 첫 번째 관리자 사용자 화면을 만들어야 합니다.사용자의 사용자 이름, 비밀번호, 전체 이름, 이메일 주소를 입력한 다음 저장하고 계속합니다.
그런 다음 서버 IP 주소http://ip_address:8080를 입력하여 저장하고 완료합니다.
예예🎉 젠킨스 준비됐어!클릭하여 젠킨스를 사용하기 시작합니다.
5단계 - GitHub webhook을 추가하여 변경 사항을 Jenkins로 밀어넣기
In the app’s GitHub repository, go to Settings, then from the sidebar click on Webhooks. Click on Add webhooks and enter the Jenkins url with /github-webhook/ appended to it, into the Payload URL field.
Select application/json for Content-type.
Select Just the push event for the event to trigger the webhook.
Check Active and click Add webhook. Now, GitHub can push events to Jenkins successfully.
6단계 - Jenkins를 사용하여 어플리케이션 구성
Open up a new terminal tab or window and login to your server with the same non-root user account.
ssh username@droplet_ip_address
In that same terminal, enable root privileges using:
sudo su
apt install npm
After switching to the root user and installing npm, Jenkins automatically creates a new user after installation. Switch to it using this command.
su jenkins
Generate a new SSH key with the following command:
ssh-keygen -t rsa
Press enter for the location and do not type any password when requested, just hit enter.
이 절차가 완료되면 다음 방법을 사용하여 공개 키 정보를 인쇄합니다.
cat ~/.ssh/id_rsa.pub
공개 키를 복제합니다.이제 새 터미널에서 비 루트 사용자에게 다시 로그인합니다.
다음 명령을 사용하여 승인된 키를 엽니다.
sudo vim ~/.ssh/authorized_keys
id rsa 키를 붙여넣고 종료합니다.키가 올바르게 설정되었는지 확인하기 위해서, 제인킨스 서버terminal로 전환하고, ssh를 사용하여 비 루트 사용자에게 로그인하십시오.적절한 절차를 따르면 성공적으로 로그인할 수 있습니다.
7단계 - Jenkins에 GitHub 플러그인 추가
In the Jenkins dashboard, go to Manage jenkins, and then click on Manage plugins.
From the Available tab, search for github and select Github Integration plugin.
Click on Install without restart and the plugin would be installed in a few seconds.
8단계 - 테스트가 성공한 후 Heroku에 배포할 수 있도록 Jenkins를 구성합니다.
Now that GitHub is now connected to Jenkins, we can create a new project.
On the sidebar, click on New Item, select Freestyle project from the options, and click OK.
다음 설정 페이지로 안내해야 하지만, 없으면 왼쪽 표시줄의 설정을 눌러서 열 수 있습니다.
설정 페이지의general 옵션 카드에서 Github 프로젝트 옵션을 선택하고 Github 프로젝트 링크를 추가합니다. (프로젝트 리포의 URL,.git 확장자 없음)
그런 다음 [소스 코드 관리] 섹션으로 스크롤하여 Git를 선택하고 를 사용하여 저장소 URL을 추가합니다.git 확장 (복제 메모리 라이브러리에 사용할 URL과 같습니다.)
주 지점을 주 지점으로 변경할 수도 있고, 배치 과정에 필요한 다른 지점으로 변경할 수도 있습니다.
AddRepository 버튼을 클릭하여 Heroku 응용 프로그램을 가리키는 두 번째 저장소를 추가합니다.
Heroku 응용 프로그램 재구매 링크를 가져오려면 Heroku 대시보드의 응용 프로그램으로 이동하여 링크를 설정하고 복사합니다.
Jenkins 대시보드로 돌아가 이 링크를 저장소 URL에 붙여 넣습니다.
새 인증서가 필요하기 때문에 Add를 누르면 Heroku 프로그램에 인증서를 만들 수 있습니다.
목록에서 Jenkins를 선택하면 팝업 창이 표시됩니다.
유형이 사용자 이름과 암호이고 범위가 전역인지 확인하십시오.
당신이 선택한 사용자 이름을 입력하지만, 가장 좋은 것은 묘사적인 것이다.나는 Heroku를 나의 사용자 이름으로 사용할 것이다.
그런 다음 암호 필드에 Heroku Api 키를 추가하고 저장해야 합니다.Heroku Api 키를 가져오려면 Heroku dashboard로 이동하여 계정 설정을 클릭하고 아래로 스크롤하여 Api 키를 보십시오.암호 필드에 복사하여 붙여넣습니다.
필요한 경우 이 자격 증명에 대한 설명을 추가할 수 있습니다.
추가 를 클릭하여 자격 증명 생성을 완료합니다.
이제 새로 만든 자격 증명이 드롭다운 목록에서 선택되어 있는지 확인합니다.없는 경우 드롭다운 목록을 클릭하고 선택합니다.
다음에advanced를 누르고 다른 원격 저장소에 이 저장소를 표시할 이름을 추가합니다.이따가 이 이름이 필요합니다.나는 간단하기 때문에 내 이름을 JenkinsTest라고 명명했다.
그런 다음 Build Triggers 섹션으로 스크롤하고 GitHub hook trigger for GITscm polling 옵션을 선택합니다.
Build 섹션에서 Addbuildstep 버튼을 클릭한 다음 ExecuteShell을 클릭합니다.셸에 다음 코드를 입력합니다.
#!/bin/bash
ssh non-root-username@<droplet_ip_address>
alias proj="cd node-app-name"
git pull origin main
npm install
npm test || exit 1
AddPost-build action을 클릭하고 Git Publisher를 선택한 다음 Push Only If build successful 옵션을 선택합니다.Add Branch 를 클릭하여 Branch to Push 필드에 배포할 분기의 이름을 입력하고 Heroku 응용 프로그램 저장소를 식별하는 데 사용되는 이름을 Target remote name 필드에 추가합니다. (제 이름은 JenkinsTest입니다. 기억하고 있다면 여기에 이름을 추가하십시오.)
그런 다음 저장합니다.
프로젝트 대시보드로 이동하여 왼쪽 사이드바에 있는 Build now를 클릭하여 코드가 성공적으로 구축되었음을 즐겁게 보십시오!
도파민을 더 얻으려면 코드를 수정하고 GitHub을 클릭하세요.코드가 자동으로 Heroku에 배치되는 과정을 다시 한 번 살펴본다.
만약 당신이 이 문장이 도움이 된다고 생각한다면, 메시지를 남기거나 평론을 발표하세요.만약 당신에게 어떤 문제가 있다면, 평론 부분에서 저에게 알려 주세요.
그리고 나를 따라 더 많은 글을 읽는 것을 잊지 마세요.감사합니다.
Reference
이 문제에 관하여(Jenkins와의 지속적인 통합 및 배포), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mariehposa/achieving-continuous-integration-and-deployment-with-jenkins-4d6k텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)